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との大きな値のため、注文した並列パイプラインに非常に高価になることができ ...