给定Map
将字符串映射到List
,有没有办法使用Java Streams返回布尔值,其中TRUE表示一个或多个列表有元素?如果地图中的所有列表都为空,则返回FALSE。
Map< String , List<String> > map = …
可以使用Streams替换这个传统代码吗?
// 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;
}
}
请注意,我们可以在第一次发现后突破检查。无需检查所有Map值(所有列表)。如果为了效率,Stream可以执行相同的首次停止工作(“短路”操作),那将是很好的。
答案 0 :(得分:28)
在Java 8中,您可以检查并非所有列表都是空的。
boolean anyNonEmpty = !map.values().stream().allMatch(List::isEmpty);
答案 1 :(得分:17)
使用the anyMatch
method查找流的任何元素是否与Predicate
匹配。在这里,您的谓词是条目的值(列表)不为空。
boolean anyNonEmpty = map.entrySet()
.stream()
.anyMatch(entry -> !entry.getValue().isEmpty());
答案 2 :(得分:0)
int size = Map.entrySet().stream()
.map(entry -> entry.getValue())
.flatMap(list -> list.stream())
.size();
if(size==0)
return Boolean.False;
else
return Boolean.True;
这段代码很简单,对您的工作有帮助。