我正在使用 Java 8 功能比较 2 个地图,并根据条件想要返回结果。使用.forEach显示编译时错误,基本上,返回是从 Lambda 表达式而不是从循环返回。如何从包含 lambda 的循环返回?请注意,我不是在比较两个地图对象的相等性nMap.forEach((k,v) -> { if (!mMap.containsKey(k) || mMap.get(k) < v) { return -1; }});
2 回答
白猪掌柜的
TA贡献1893条经验 获得超10个赞
使用Stream的entrySet()和anyMatch,而不是forEach:
boolean found =
nMap.entrySet()
.stream()
.anyMatch(e -> !mMap.containsKey(e.getKey()) || mMap.get(e.getKey()) < e.getValue());
if (found)
return -1;
斯蒂芬大帝
TA贡献1827条经验 获得超8个赞
另一种使用 a 的方法Stream根据给定的条件过滤条目。流式传输的结果是一个Optional可能包含一个 found Entry:
if (nMap.entrySet().stream()
.filter(e -> !mMap.containsKey(e.getKey()) || mMap.get(e.getKey()) < e.getValue())
.findAny()
.isPresent()) {
return -1;
}
添加回答
举报
0/150
提交
取消