Stream boolean を集計

Stream 処理して単に、boolean を集計したい時、
1つでも true が発生、または全てが true になるかを求める時など、
forEach で、AtomicBoolean をセットするのは直感的だが、賢くはない。

map メソッドで、Boolean に変換して collect で集計するのがスマートである。

Stream<T> stream;
stream.map(t->{
    // TODO
    return  truefalse を返す。。。
})

1つでも true → trueを返す。

.collect( Collectors.reducing(false, Boolean::logicalOr) ); 

全部 true → trueを返す。

.collect( Collectors.reducing(true, Boolean::logicalAnd) );

Collectors.reducing は、これらの map の使い方によっては、以下のような集計もできる。

例)任意のリストで、ある条件で、map で Boolean を返すようにする。
例えば、30 より大きい値をカウントする。

int count = Arrays.asList(1, 12, 4, 23, 33, 43, 3, 55)
.stream().map(i->i > 30)
.collect(Collectors.reducing(0, t->t ? 1 : 0, (a, b)->a+b));

map メソッドで boolean に変換して、、
.collect(Collectors.reducing(0, t->t ? 1 : 0, (a, b)->a+b));

でも、あまりこんなカウントの方法でなくて、filter して Collectors.counting() を求めるのが
多くのやり方であろう。