给出一个将字符串映射到Map
的Map
,有没有一种方法可以使用List
返回一个布尔值,其中TRUE表示一个或多个列表包含元素?如果地图中的所有列表均为空,则返回FALSE。
List
使用Streams可以代替此常规代码吗?
Java Streams
请注意,我们可以在首次发现后退出考试。无需检查所有Map值(所有List)。如果为了提高效率,Stream可以在第一次发现时执行相同的停止工作(“短路”操作),那就太好了。
Map< String , List<String> > map = …
在Java 8中,您可以检查不是所有列表都为空。
// 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;
}
}
注意Stream::allMatch
是 boolean anyNonEmpty = !map.values().stream().allMatch(List::isEmpty);
。因此,流是高效的,不会运行超过所需的时间。
使用Stream::allMatch
查找流中是否有任何元素与Stream::allMatch
相匹配。在这里,您的谓词是条目的值(列表)不为空。
short-circuiting terminal operation
the anyMatch
method
此代码很简单,可能对您的工作有所帮助。