簡體   English   中英

使用JAVA 8 Streams轉換

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM