【发布时间】:2017-02-03 12:51:57
【问题描述】:
我有一个现有的代码,我希望转换成 Java8 提供的流:
for(Person details: modList){
if (null != details &&null!=details.getPersonChild()) {
Child mod= details.getPersonChild();
if (mod.isAB() ||
mod.isBC() ||
mod.isCD() ||
mod.idDE() ||
mod.isEF()) {
childeligible = true;
break;
}
}
}
到目前为止我已经完成了:
return details.stream()
.filter( p -> null != p && null != p.getPersonChild())
.map(Person::getPersonChild)
.anyMatch(mi -> (mod.isAB() || mod.isBC() || mod.isCD() || mod.idDE() || mod.isEF()));
有没有更优化的方法来实现这一点
感谢您的帮助
【问题讨论】:
-
你能添加一个
isABCDEF()方法吗? -
这是一个小的改进,但是一旦您的 Stream 中有子项,您可以使用
.filter(Objects::nonNull)过滤非空对象。 -
不该方法不能添加...因为子类不在范围内
-
您可以使用
anyMatch(Child::isBC.or(Child::isCD).or(Child::isDE)),但我不确定这是否更清楚。 -
@KlitosKyriacou,我们需要转换为
Predicate,否则它不会编译((Predicate<String>) Child::isAB).or(...)
标签: java collections java-8 java-stream