我尝试将此代码更改为Java 8流。我的代码如下所示:
for(D d : n.getD()) {
for(M m : d.getT().getM()) {
if(m.getAC().contains(this)) {
return d;
}
}
}
我希望将其转换为java 8流。我是这样开始的:
n.getD().stream()
.map(m -> m.getT().getM())
但我不知道我是否应映射,或使用过滤器。
答案 0 :(得分:4)
其他可能的方法是使用anyMatch
代替第二filter
return n.getD().stream().filter(
d -> d.getT().getM().stream().anyMatch(
m -> m.getAC().contains(this)
)
).findFirst(); // result will be Optional<D>
答案 1 :(得分:2)
处理此问题的一种方法:
return n.getD().stream().filter(d -> d.getT().getM().stream().filter(m -> m.getAC().contains(this)).findFirst().isPresent()).findFirst();
在这种情况下,可以使用空值。
答案 2 :(得分:1)
我不了解您的域名,但为了保持其可读性,我可能会委托并简化为以下内容:
return n.getD().stream()
.filter(d -> d.getT().containsAC(this))
.findFirst()
.orElse(null);
然后在T类添加委托方法:
public boolean containsAC(AC ac) {
return m.stream().anyMatch(m -> m.getAC().contains(ac));
}