当前位置: 首页 > 知识库问答 >
问题:

如何正确地使用Java 8的特性(如stream、forEach等)进行嵌套迭代?

钱峻
2023-03-14

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

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()返回),但是,将其编写为嵌套循环会遇到一些麻烦。

建议?

共有1个答案

柳才良
2023-03-14

您可以使用2个嵌套的anyMatch():

private boolean containsNulls(HashBasedTable table) {
    return table.columnKeySet()
        .stream()
        .anyMatch(column -> table.rowKeySet()
            .stream()
            .anyMatch(row -> table.get(row, column) == null)
        );
}
 类似资料:
  • 上下文:我正在使用java1.7.0_07和Jython构建一个JavaFX应用程序。我的应用程序有一个 ScrollPane,其中包含一个 GridPane,其中包含可变数量的 GridPanes。我的应用程序会在每次树视图选择发生更改时丢弃并重新生成最里面的 GridPanes。 问题:当我在树状视图中选择某个内容时,最里面的网格窗格非常大,除了第一个最里面的窗格外,其他所有的网格窗格都被推到

  • 替代的解决方法可以是将有限的函数转换为对检查的异常更友好的普通旧foreach循环。 但天真的方法是失败的: 更新 回答这个问题的一个技巧以前在Why does stream not implementing iterable 上发布过?作为旁侧答案并不能真正回答问题本身。我认为这不足以将这个问题定性为那个问题的重复,因为他们问的是不同的问题。

  • 使用JSF 2.0,我需要显示一个表,其中每一行都包含一个打开弹出窗口的链接。我有两种型号:

  • 概述 Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。 简而言之,Stream API 提供了一种高效且易于使用的处理数据的方式。 特点 不是数据结构,不会保存数据。 不会修改原来的数据源,它会将操作后的数据保存到另外一个对象中。 惰性求值,流在中间处理过程中,只是对操作进行了记录,并不会立即执行,需要等到执行

  • 我有4个片段,其中一个片段中有一个viewpager和一个不同的类,我用3个其他片段定义了viewpager的适配器,第一次打开此片段时,所有子片段都正确显示在viewpager中,但当我切换(使用transaction.replace)到另一个片段并再次返回时,子片段消失了,我不能使用ChildFragmentManager,因为它在代码中显示错误(ChildFragmentManager无法解

  • 问题内容: 假设我们尝试将可能引发检查异常的lambda应用于Java 8流: 这不会编译。 一种解决方法是将检查后的异常嵌套在其中,但是这会使以后的异常处理变得复杂,而且很丑陋: 另一种解决方法可能是转换限制功能,以普通的旧的foreach 循环是比较友好的检查的异常。 但是幼稚的方法失败了: 更新资料 为何在的地方贴了一个回答该问题的技巧。作为副答案本身并不能真正回答该问题。我认为这不足以使这