Java Stream.forEach
関数には、コンシューマがチェック例外をスローすることは不可能であるという重大な制限があります。このように、ストリームの要素に1つずつアクセスしたいと思います。ストリームを1つずつ読み込む方法は?
は、私はこのような何かをしたい:
while(true) {
Optional<String> optNewString = myStream.findAny();
if (optNewString.isPresent())
doStuff(optNewString.get());
else
break;
}
しかし、findAny
は短絡端末操作です。つまり、ストリームを閉じます。このコードは、whileループの2番目の反復でクラッシュします。私は単純に配列の中にすべての要素を配置することはできませんし、その配列を1つずつ移動することはできません。何千万もの要素が潜在的に存在するからです。
ご注意くださいforEach
内から例外をスローする方法はありません。この質問はalready been answeredです。
チェックされた例外は悪い考えであり、ストリームや関数型プログラミングにはうまく適合しません。だから、それらをキャッチし、実行時の例外でそれらをラップします。 –
@JBNizet確かに、それはうまく動作し、私が現在 'LambdaException'型を使って行っていることです。ちょうどそれがうまくいっているということはそれがうまく書かれているということを意味するものではなく、常に改善の余地があります。さらに、ストリームの次の要素を待つことができないのは、APIの穴のようです。 –
[This](https://stackoverflow.com/questions/20129762/why-does-streamt-not-implement-iterablet)を使用する可能性があります – jrtapsell