3
後に例外をスローした場合、フィルタリングのJavaストリームを継続する必要があります戻ってきた。は、私はこのコードを持っているマップは、フィルタとFindFirstの
代わりに、リスト内の残りの項目のテストを続け、フィルタに一致する次の項目をマップします。
ストリームとラムダでどうすればいいですか?
私はこのより命令的なコードに変換できますが、機能的な解決策を探したいと思います。それがストリームにだけ(最大で)単一の要素を減らし、あなたが「戻って」とその後の多くを得ることができないので
for (MyListItem myList : listItem) {
try {
if (listItem.matchesCondition()) {
return Optional.of(listItem.getResult());
}
} catch (Exception e) {
// SWALLOW THE EXCEPTION SO THE NEXT ITEM IS TESTED
// log error
}
}
return Optional.empty();
また、代わりに.MAP 'のあなたは' .flatMap(listItemのを使用することができ.filter(オブジェクト::非NULL) '(例外ではnullに) - > {しようと{返すStream.of(listItem.getResult( ));} catch(Exception e){return null;}}) '。 'flatMap'演算は' Stream.empty() 'のように' null'を扱います。 – Holger
@Holger。私はそれについて考えました(または、Option.ofと同様のフラットマップ)。しかし、それはフィルタ(:: nonNull)と同様に騒々しいです。 Scalaの '.flatMap(Try(....)。toOption) 'のようなものをストリームの中の例外を無視するだけでいいですか? – Thilo
さて、あなたはそれを正確に行うユーティリティメソッドを作ることができます。 – Holger