オリジナルます。https://my.oschina.net/jack90john/blog/1493170
何度も仕事は2つのリストをマージし、重複したコンテンツを削除する必要があります。これは非常に簡単な操作で、ここでは、ストリームを使用して、この操作を完了しようとしたレコードは主です。
java8より多くの従来のアプローチは、またとないのセット内容は、それが自動的に重くなりますので、セットリストに2を追加することである前に、その後、セットリストは、次のコードを回します:
設定<文字列>を設定= 新しい HashSetの<> (リスタ)。 set.addAll(ListBの)。 一覧 <文字列>リスト= 新しい ArrayListを<> (セット); System.out.println(リスト);
これを行うには、合併後のリストとは、重いの結果です。
java8が発生した後、我々はより便利で効率的なアプローチを持っている私たちは、ストリームでこの操作を完了できるようにすることです、次のように、コードは次のとおりです。
一覧<文字列>集める= Stream.of(LISTA、ListBの)
.flatMap(コレクション::ストリーム)
.distinct()
.collect(Collectors.toList());
結果は、このように私たちが望む最終的な結果を得て、あなたは明らかにストリームを介し完成したコードはよりシンプルかつスムーズに見えます見ることができます。
ヒント:あなたがマージしたい場合は、そのオーバーライドが等しいとhashCodeメソッドに注意してください主題です。
添付ファイル:
参照の完全なコード、。
輸入 java.utilの。* ; 輸入java.util.stream.Collectors。 輸入java.util.stream.Stream。 パブリック クラスは、{コンバイン パブリック 静的 ボイドメイン(文字列[]引数){ 文字列[] ARR1 = { "A"、 "B"、 "C"、 "D"、 "E"、 "F"を}。 リスト LISTA = <文字列> 新しいのArrayList <> (は、Arrays.asList(ARR1)); 文字列[] ARR2 = { "D"、 "E"、 "F"、 "G"、 "H" }。 一覧 ListBの= <文字列> 新しいのArrayList <> (配列。 asList(ARR2))。 セット <文字列> =セット新HashSetの<> (リスタ)。 set.addAll(ListBの)。 一覧 <文字列>リスト= 新しい ArrayListを<> (セット); System.out.println(リスト); 一覧 <文字列>集める= Stream.of(LISTA、ListBの) .flatMap(コレクション::ストリーム) .distinct() .collect(Collectors.toList()); System.out.println(収集) } }