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

如果映射中的所有列表值都为空/非空,则使用Streams返回布尔值

子车鸿运
2023-03-14

给定一个map将字符串映射到list,有没有一种方法可以使用Java流返回一个布尔值,其中TRUE表示一个或多个list had元素?如果映射中的所有列表都为空,则返回false。

Map< String , List<String> > map = …

流的使用可以取代这种传统的代码吗?

// See if any diffs were found. Loop through the Map, look at each List of diffs to see if non-empty.
boolean anyElementsInAnyList = false;
for (List<String> list : map.values () ) {
    if (!list.isEmpty()) {
        anyElementsInAnyList = true;
        break;
    }
}

注意,我们可以在第一次发现后跳出检查。不需要检查所有的映射值(所有列表)。为了提高效率,如果流可以执行相同的“先工作后查找”(一个“短路”操作),那就好了。

共有1个答案

毋树
2023-03-14

在Java8中,您可以检查并非所有列表都是空的。

 boolean anyNonEmpty = !map.values().stream().allMatch(List::isEmpty);

注意,stream::allmatch是一个短路终端操作。因此流是有效的,不会运行得比需要的时间长。

 类似资料:
  • 问题内容: 这可能只是白痴,但对我来说有点混乱: 为什么在返回时返回? 问题答案: 您正在根据布尔值的文字值检查它。一样不会是真的。 如果将其投射,您将看到区别: 究其原因是真实的,因为你是比较相同的对象。与或相同。 当您看到类似的东西并且此检查从未通过时,困难就来了。那是因为您正在检查项目的 真实值 。按照惯例,所有这些项目都将通过布尔检查失败- 也就是说,它们的布尔值将为: (明显) 任何空序

  • 我有一个列表,其中包含如下内容: 我想打印成功只有当所有的值在列表是40,否则失败。我该怎么做?

  • 到目前为止,我得到了indexOutOfBoundsException错误

  • 但是如果serviceworkList列表为空,则变量“validate”为false。我知道allMatch的规范,如果list为空,则返回为true。 有什么建议,我可以如何重建流,如果列表列表为空,我会得到假?

  • 请需要您的帮助!我用cURL发了一篇文章,但回复是空白的(布尔值为假)。如果我在浏览器上发布数据,就像按下

  • 我知道我可以测试列表是否为空,如下所示: 但我不明白为什么下一个代码不是等效的: