给定一个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;
}
}
注意,我们可以在第一次发现后跳出检查。不需要检查所有的映射值(所有列表)。为了提高效率,如果流可以执行相同的“先工作后查找”(一个“短路”操作),那就好了。
在Java8中,您可以检查并非所有列表都是空的。
boolean anyNonEmpty = !map.values().stream().allMatch(List::isEmpty);
注意,stream::allmatch
是一个短路终端操作。因此流是有效的,不会运行得比需要的时间长。
问题内容: 这可能只是白痴,但对我来说有点混乱: 为什么在返回时返回? 问题答案: 您正在根据布尔值的文字值检查它。一样不会是真的。 如果将其投射,您将看到区别: 究其原因是真实的,因为你是比较相同的对象。与或相同。 当您看到类似的东西并且此检查从未通过时,困难就来了。那是因为您正在检查项目的 真实值 。按照惯例,所有这些项目都将通过布尔检查失败- 也就是说,它们的布尔值将为: (明显) 任何空序
我有一个列表,其中包含如下内容: 我想打印成功只有当所有的值在列表是40,否则失败。我该怎么做?
到目前为止,我得到了indexOutOfBoundsException错误
但是如果serviceworkList列表为空,则变量“validate”为false。我知道allMatch的规范,如果list为空,则返回为true。 有什么建议,我可以如何重建流,如果列表列表为空,我会得到假?
请需要您的帮助!我用cURL发了一篇文章,但回复是空白的(布尔值为假)。如果我在浏览器上发布数据,就像按下
我知道我可以测试列表是否为空,如下所示: 但我不明白为什么下一个代码不是等效的: