使用JAVA 8 Streams转换

use*_*434 5 java java-8 java-stream

我试图将此代码更改为Java 8流.我的代码看起来像这样:

for(D d : n.getD()) {
    for(M m : d.getT().getM()) {
        if(m.getAC().contains(this)) {
            return d;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我想将它转换为java 8流.我是这样开始的:

  n.getD().stream()
        .map(m -> m.getT().getM())
Run Code Online (Sandbox Code Playgroud)

但后来我不知道我是否应该重新映射,或使用过滤器.

Ste*_*ike 2

处理这个问题的一种方法是:

return n.getD().stream().filter(d -> d.getT().getM().stream().filter(m -> m.getAC().contains(this)).findFirst().isPresent()).findFirst();
Run Code Online (Sandbox Code Playgroud)

在这种情况下,空值是可能的。

  • 真的。`anyMatch(predicate)` 比 `filter(predicate).findFirst().isPresent()` 更好。如果您使用 find,请在查找*第一个* 不重要时使用“findAny(...)”。 (5认同)