给定一个MapString到a 的映射List,有没有办法使用Java Streams返回一个布尔值,其中TRUE表示一个或多个列表有元素?如果地图中的所有列表都为空,则返回FALSE.
Map< String , List<String> > map = …
Run Code Online (Sandbox Code Playgroud)
可以使用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;
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,我们可以在第一次发现后突破检查.无需检查所有Map值(所有列表).如果为了效率,Stream可以执行相同的首次停止工作("短路"操作),那将是很好的.
Pet*_*rey 34
在Java 8中,您可以检查并非所有列表都是空的.
boolean anyNonEmpty = !map.values().stream().allMatch(List::isEmpty);
Run Code Online (Sandbox Code Playgroud)
rge*_*man 18
使用的anyMatch方法是发现,如果流中的任何元素相匹配的Predicate.这里,您的谓词是条目的值(列表)不为空.
boolean anyNonEmpty = map.entrySet()
.stream()
.anyMatch(entry -> !entry.getValue().isEmpty());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
35940 次 |
| 最近记录: |