2016-05-24 7 views
4

流暢なAPIメソッドを使用してオブジェクトのリストを減らすことはできますか?例えば、私はのcom.mysema.query.types.expr.BooleanExpressionを持っており、これはcom.mysema.query.types.expr.BooleanExpression#andメソッドによって統合されるべきです。私は古いものとについて、それぞれこのような信頼性の高い、少し醜い経由でこれを行うことができます。流暢なAPIを持つオブジェクトのリストを減らすJava8ストリーム

BooleanExpression result = predicates.get(0); 
for (int i = 1; i < predicates.size(); i++) { 
    result = result.and(predicates.get(i)); 
} 

のJava 8のストリームAPIを介してこれを書き換えるための任意のチャンスを?

答えて

5

はい、あなたはreduce操作を使用することができます。

BooleanExpression result = predicates.stream().reduce(BooleanExpression::and).orElseThrow(AssertionError::new); 

このコードは、各中間結果を-ing andして、述語のすべてを削減します。

これは、リストが空の場合にOptional<BooleanExpression>を返します。現在のコードでは少なくとも1つの要素があると仮定しているため(.get(0);を直接呼び出す)、上記のスニペットではAssertionErrorがスローされます。もちろん、あなた自身の例外を使うこともできます。あなたがアイデンティティの表現を持っている場合でも、あなたは( `.reduceを使用することができますが、あなたも

BooleanExpression result = predicates.stream().reduce(identity, BooleanExpression::and); 
+0

を使用することができますあなたはBooleanExpressionはいつもここtrueを返すだろうアイデンティティを持つことができる場合には

、 Booleanと他の 'BooleanExpression'を組み合わせることさえ気にしません。 – Holger

関連する問題