ストリームを使用してリストを別のリストにマップしようとしています。Java8ストリームマップ - すべてのマップ操作が成功したかどうかを確認しますか?
元のリストの一部の要素がマップに失敗します。つまり、マッピング関数は適切な新しい値を見つけることができない可能性があります。
いずれかのマッピングが失敗したかどうかを知りたい。理想的には、障害が発生したら処理を中止することもできます。
私が現在やっていることは次のとおりです。
- 私はそこストリームからNULL値を削除するには、noマッピングされた値
- I
filter()
- 私は
collect()
はませんし、その後 - 場合、マッピング機能が
null
を返します。結果のサイズと元のリストのサイズを比較します。たとえば、
:
List<String> func(List<String> old, Map<String, String> oldToNew)
{
List<String> holger = old.stream()
.map(oldToNew::get)
.filter(Objects::nonNull)
.collect(Collectors.toList);
if (holger.size() < old.size()) {
// ... appropriate error handling code ...
}
else {
return holger;
}
}
これは非常にエレガントではありません。また、すべてが失敗してもすべてが処理されます。
これを行うにはどうすればよいですか? または、ストリームを完全に削除して、古いループを使用する必要がありますか?
結果がnullの場合、未チェックの例外を 'oldToNew :: get'からスローして、それを外部にキャッチしてみませんか? – Tunaki
@ Tunakiありがとう、それはオプションです。私はそれがエレガンスかパフォーマンスのどちらかを改善するかどうかは分かりません(例外はおそらく高価です)。 – daphshez
変数の名前を 'new'にしないでください。それはうまくいかないでしょう...そして、 'void List'の戻り値の型はどういう意味ですか? –
Holger