どのように私は数が0に等しいストリームとリミット(数)の呼び出しをスキップすることができますか?

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://10.200.1.11:23101/article/api/json?id=376232&siteId=1