数が0に等しいとき、どのように私は、ストリームに.limit(番号)をスキップすることができますか?

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

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=277163&siteId=1
おすすめ