Java SE 8ストリームよりも、最も速い方法と複雑な方法でunion/exclude/intersection操作を実行しようとしています。私はこれをやっているJavaストリーム間の操作
:
Stream<String> fruitStream = Stream.of("apple", "banana", "pear", "kiwi", "orange");
Stream<String> fruitStream2 = Stream.of("orange", "kiwi", "melon", "apple", "watermelon");
//Trying to create exclude operation
fruitStream.filter(
item -> !fruitStream2.anyMatch(item2 -> item2.equals(item)))
.forEach(System.out::println);
// Expected result: fruitStream - fruitStream2: ["banana","pear"]
私は、次の例外を取得:
はjava.lang.IllegalStateException:ストリームがすでに時に操作したり、私がした場合
を閉じられているがこの操作を行うことができた、私は自分自身を開発することができたすべての残り、組合、交差点など...
2点は次のとおりです。
1)この例外を取得するにはどうしたらよいですか?
2)2つのストリーム間で操作を行う方法がそれほど複雑ではありませんか?
注
私はそれらについて学ぶためにストリームを使用します。配列やリストに変換したくないですか?
「配列やリストに変換したくないのですが」そうしたくないかもしれませんが、コレクションにストリームを格納することを伴わない別の解決策はありません。 –
varargsが暗黙のうちに配列を作成することを理解しています。 – shmosel
'Stream.of'がシーンの背後で配列の作成を行うという事実を無視したいなら、' fruitStream.filter( item - >!Stream.of( "orange"、 "kiwi" anyMatch(item2 - > item2.equals(item)))... ... 'もちろん、' HashSet'ベースのソリューションがより効率的です。 – Holger