[英]Convert using JAVA 8 Streams
我試圖將此代碼更改為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())
但后來我不知道我是否應該重新映射 ,或使用過濾器 。
其他可能的方法是使用anyMatch
而不是第二個filter
return n.getD().stream().filter(
d -> d.getT().getM().stream().anyMatch(
m -> m.getAC().contains(this)
)
).findFirst(); // result will be Optional<D>
一種方法來處理這個:
return n.getD().stream().filter(d -> d.getT().getM().stream().filter(m -> m.getAC().contains(this)).findFirst().isPresent()).findFirst();
在這種情況下,空值是可能的。
我不知道你的域名,但為了保持其可讀性,我可能會委托並簡化為這樣的事情:
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));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.