繁体   English   中英

如何正确使用Java 8功能(例如流,forEach等)进行嵌套迭代?

[英]How to properly do nested iteration w/ Java 8 features such as stream, forEach etc?

重写这样的东西的优雅方法是什么

private boolean containsNulls(HashBasedTable table) {
    for(Object column : table.columnKeySet()) {
        for(Object row : table.rowKeySet()) {
            if(table.get(row, column) == null) {
                return true;
            }
        }
    }
    return false;
}

使用Java 8功能?

我正在寻找类似的东西

tableCells.stream().filter(cell -> cell.getValue() == null)
       .findFirst().orElse(null);

(根据java中lambda forEach()的返回),但是将其作为嵌套循环编写时遇到了一些麻烦。

建议?

你可以2嵌套anyMatch():

private boolean containsNulls(HashBasedTable table) {
    return table.columnKeySet()
        .stream()
        .anyMatch(column -> table.rowKeySet()
            .stream()
            .anyMatch(row -> table.get(row, column) == null)
        );
}
 return table.columnKeySet()
             .stream()
             .flatMap(x -> table.rowKeySet().stream().map(y -> new Object[]{x,y}))
             .anyMatch(x -> table.get(x[1], x[0]) == null)

我没有编译这个,所以我希望不要错过一个括号...

请注意,您需要最新的java-8才能真正实现此功能,就像您的循环一样,请阅读此内容以获取详细信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM