2016-12-09 4 views
0

オブジェクトをリストに追加し、結果を1行で機能的に非必須の方法で返す方法はありますか? オリジナルのリストを変更しないでください。 Java 8が許可されています。リストにオブジェクトを追加し、Java 8で結果を返しますか?

私は既に2つのリストを1つの行に連結する方法を知っています。 (Source

List listAB = Stream.concat(listA.stream(), listB.stream()).collect(Collectors.toList()); 

私はまた、1つのライン内のオブジェクトのうちのリストを作成する方法を知っています。

List listO1 = Collections.singletonList(objectA); 
List listO2 = Stream.of(objectA, objectB).collect(Collectors.toList()); 
List listOO = Arrays.asList(objectA, objectB); 

次の行の一部に最初の行にlistBを交換するよりも良いものはありますか?

+0

listA.clone()。append(objectB)を試してみましたか? – bracco23

+0

@ bracco23 'List 'インターフェースは 'append(...)'メソッドを公開していませんか? – mxscho

+2

clone()も公開されません。 –

答えて

7

あなたは

List<Foo> newList = 
    Stream.concat(list.stream(), Stream.of(fooToAdd)) 
      .collect(Collectors.toList()); 

のBtを使用することができ、私はこれは少し複雑見つけます。単一行の、より曖昧な解決策を見つけるよりも、読みやすさを追求してください。また、あなたの質問でやっているように、生の型を決して使用しないでください。

+0

生の種類については確かです。私はそれが紛らわしくて珍しいかもしれないと思っても、質問を膨らませたくなかった。あなたの答えは今私のために行く方法だと思うが、もっと良いものがあるかもしれないと思った。 – mxscho

+1

3行**です。確かにそれは唯一の声明*ですが、それは疑問ではありませんでした。 ;-) 2文、1行答え[ここ](http://stackoverflow.com/a/41071051/5221149)。私の答えが冗談かどうかはまだ決めていない。 – Andreas

+0

@アンドレアスそれはどういうわけか面白いですが、それは冗談ではありません。しかし、他の解決策について不平を言うことによって、皆さんは私の質問をすべての人が思ったプロセス(1行= 1つのステートメント=機能的、必須ではない)に合わせて編集するように強制しています。私はそれがあなたの答えを無効にするので(そして私はそれが私が意味したことが明らかだと思ったので)それをしたくありません。さらに、この答えはまだ私には新しいものではなく、問題の半分に言及しました(他の良い解決策がないためかもしれません)。私はそれを受け入れる前にもう一日待つと思う。 – mxscho

0

あなたはvar argsを使用して、実際のliststreamに追加することからstreamを作成し、例えばことができます。

public static <T> List<T> append(List<T> list, T... args){ 
    return Stream.concat(list.stream(), Stream.of(args)) 
      .collect(Collectors.toList()); 
} 
0

リストにオブジェクトを追加し、返す方法はあります結果1行に?もしも元のリストに突然変異させるべきでないなら、あなたはどうしますか

List<Foo> newList = new ArrayList<>(list); newList.add(fooToAdd); 

シンプルで、それが唯一1行です。

+0

それは実際に私の悪いです。私は質問に「1行」の定義を追加する必要がありました(たとえば、「機能的で絶対的なやり方ではない」など)。 – mxscho

+2

正しいですが、あなたの質問にもっと明確になっているはずです。つまり、あなたはプログラマですよね?だから、あなたが意味するものとは違う言葉を書いているとどうなりますか?そうです、それはあなたが望んだことをしません、この答えはあなたが望むものと同じです。あなたが言う/書いた*事柄。だから、あなたが間違って書いたら、あなたはそれを修正する*、別名あなたは質問を編集し、*明確にする*。それが私の答えを無効にするかどうかは関係ありません。答えはあなたの質問を明確にするために必要なヒントの私の(少し)面白い方法でした。なぜなら、あなたがするまで、この答えは*最短+単純な最善の答えですから。 – Andreas

+0

それは大丈夫です - ありがとうございます。それをするのは良い習慣ではないと思った。私は自分の意図に合うように質問を修正しました。 :) – mxscho

関連する問題