我想将一个列表映射到另一个使用流。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