この質問は異なる作業ソート方法のための実行基準はsomhow Java 8 Stream - Filter and foreach method not printing as expected私は、ソート、フィルタおよびJava 8ストリームのマップ方法で働いていますJavaの8ストリーム - フィルタとマップ方法
に関連しています。
Stream.of("d2", "a2", "b1", "b3", "c")
.sorted((s1, s2) -> {
System.out.printf("sort: %s; %s\n", s1, s2);
return s1.compareTo(s2);
})
.filter(s -> {
System.out.println("filter: " + s);
return s.startsWith("a");
})
.map(s -> {
System.out.println("map: " + s);
return s.toUpperCase();
})
.forEach(s -> System.out.println("forEach: " + s));
と私が得た出力は次のとおりです:
ソート:次のように上記の質問の答えに指定されているフィルタとマップがどのように機能するかを念頭に置いて キーピングは、私は、ソートの方法を試してみましたA2を; d2 ソート:b1; a2 ソート:b1; d2 ソート:b1; a2 ソート:b3; b1 ソート:b3; d2 ソート:c; b3 ソート:c; D2 フィルタ: マップA2:A2 フィルタ:B1 フィルタ:B3 フィルタ: フィルタC:
D2、今ソート方法は完全なループに対して実行され、その後 forEachのA2フィルタとマップ関数は個々の項目に対して実行されます。 3つはすべて中間関数なので、すべて同じように機能するはずです。 実行命令が正常かどうか私は何が間違っているのか分からない。
どのようにあなたがそれらを見てのすべてがなく、要素を並べ替えることができますか? 'distinct()'と同じです。それはまだ怠惰です - 'forEach'がそこになかったら' sorted'操作は呼び出されません。 – Tunaki
@KaranVermaあなたは本当に多くの質問をしなくてはならないし、いくつかのことを読んでください。 – Eugene
ストリームパイプラインは、forEachが順序付けられていない端末opであるため、ここでの並べ替えを完全に排除できます。以前のバージョンではまったく同じことをしていたと思いますが、積極的に適用されることがあったため最適化が削除されました – the8472