randomuser1:
私が持っているjava
からオブジェクトを提供するコードをitems
。それはMAXNUMBERに基づいてそれらを制限します。
items.stream()
.map(this::myMapper)
.filter(item -> item != null)
.limit(maxNumber)
.collect(Collectors.toList());
それは、正しく動作しますが、質問です - 制限ときMAXNUMBER == 0をスキップする方法はありますか?私は私が行うことができます知っています:
if (maxNumber == 0) {
items.stream()
.map(this::myMapper)
.filter(item -> item != null)
.collect(Collectors.toList());
} else {
items.stream()
.map(this::myMapper)
.filter(item -> item != null)
.limit(maxNumber)
.collect(Collectors.toList());
}
おそらく何かがあなたの心に来ない、より良い方法がありますか?ありがとう!
ジャン=バティスト・Yunès:
私はと仮定します
.limit(maxNumber == 0 ? Long.MAX_VALUE : maxNumber)
あなたが以上2 ^ 63-1の要素を持つストリームに取り組むとしていることを非常に非可能性があるとして、トリックを行います...
少なくとも、この上の並列ストリームには注意してください... APIドキュメントでノートは言います:
API注:ながら
limit()
順次ストリームパイプラインの上に、一般的に安価な操作であり、それは特にmaxSizeとの大きな値のため、注文した並列パイプラインに非常に高価になることができ ...