我想將一個列表映射到另一個使用流。Java8流映射 - 檢查所有映射操作是否成功?
原始列表的某些元素無法映射。也就是說,映射函數可能無法找到合適的新值。
我想知道是否有任何映射失敗。理想情況下,我也想在發生故障時停止處理。
什麼我目前做的是:
- 映射函數返回
null
如果沒有映射值 - 我
filter()
從流 - 我
collect()
刪除空,然後 - 我比較結果的大小和原始列表的大小。
例如:
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;
}
}
這是不是很優雅。而且,即使整件事情都失敗了,一切都會被處理。
有關更好的方法的建議嗎? 或者我應該完全溝渠並使用好的舊環路?
如果結果爲空,爲什麼不從'oldToNew :: get'中拋出未經檢查的異常,並將其捕獲到外部? – Tunaki
@Tunaki謝謝,這是一個選項。我不知道這是否會改善優雅或表現(因爲例外是昂貴的)。 – daphshez
不要命名變量'new'。這將無法正常工作......'void List'的返回類型應該是什麼意思? –
Holger