如果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; 

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