如果Map中所有List值均为空/非空,使用流返回布尔值

问题描述 投票:28回答:3

给出一个将字符串映射到MapMap,有没有一种方法可以使用List返回一个布尔值,其中TRUE表示一个或多个列表包含元素?如果地图中的所有列表均为空,则返回FALSE。

List

使用Streams可以代替此常规代码吗?

Java Streams

请注意,我们可以在首次发现后退出考试。无需检查所有Map值(所有List)。如果为了提高效率,Stream可以在第一次发现时执行相同的停止工作(“短路”操作),那就太好了。

java java-stream
3个回答
36
投票

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); 。因此,流是高效的,不会运行超过所需的时间。


18
投票

使用Stream::allMatch查找流中是否有任何元素与Stream::allMatch相匹配。在这里,您的谓词是条目的值(列表)不为空。

short-circuiting terminal operation

0
投票
the anyMatch method

此代码很简单,可能对您的工作有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.