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