私は、削減したいenum値のストリームを持っています。ストリームが空であるか、異なる値を含む場合は、null
が必要です。単一の値(複数のインスタンス)しか含まれていない場合は、その値が必要です。結果がnullのときにStream.reduce(BinaryOperator)がNullPointerをスローするのはなぜですか?
[] null
[A, B, A] null
[A] A
[A, A, A] A
私は削減でそれを実行しようとしました:
return <lots of filtering, mapping, and other stream stuff>
.reduce((enum1, enum2) -> enum1 == enum2 ? enum1 : null)
.orElse(null);
結果がnull
あるとき、この減らす方法がNullPointerException
をスローするので残念ながら、これは、動作しません。誰がなぜそれが起こるのか知っていますか? null
は有効な結果ではないのはなぜですか?今の
、私はこのように、これを解決:
MyEnum[] array = <lots of filtering, mapping, and other stream stuff>
.distinct()
.toArray(MyEnum[]::new);
return array.length == 1 ? array[0] : null;
を、これは動作しますが、私はこの「迂回」と満足していません。私はそれが適切であり、すべてを1つのストリームに入れるように見えたので、減少が気に入った。
誰もがreduce(これはあまりにも多くのコードではない)の代わりに考えることができますか?
この回答は、なぜあなたにいくつかの洞察を与えるかもしれません。http://stackoverflow.com/a/17115490/1544715 – Magnus