【发布时间】:2016-05-18 20:52:20
【问题描述】:
鉴于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;
}
}
请注意,我们可以在第一次发现后退出检查。无需检查所有地图值(所有列表)。如果为了提高效率,Stream 可以执行相同的 stop-work-on-first-finding(“短路”操作),那就太好了。
【问题讨论】:
-
你的意思是这个 java-stream 吗? oracle.com/technetwork/articles/java/…
-
有什么理由在循环中使用
Boolean而不是boolean? -
@Holger
Boolean优于 `boolean,因为我是一个面向对象的人。而且因为在做进一步的工作时,例如在 UI 框架中表示值,如 Vaadin,我可能需要对象而不是原语。 -
当您编写
Boolean而不是boolean时,代码不会变得更加面向对象。它只是打开了一个新的错误源,因为Boolean引用可以是null并且==运算符不会按照您的意图执行。除此之外,这段代码仍然是相同的命令式循环。顺便问一下,是什么让你现在回答这个四年前的问题?
标签: java java-stream