我正在比较使用Java 8功能的2张地图,并根据条件希望返回结果。使用 .forEach 会显示编译时错误,并且基本上,返回值是从Lambda表达式而不是循环返回的。如何从包含lambda的循环返回?
请注意,我没有比较两个地图对象的相等性
nMap.forEach((k,v) -> {
if (!mMap.containsKey(k) || mMap.get(k) < v) {
return -1;
}
});
答案 0 :(得分:8)
使用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;
答案 1 :(得分:2)
使用Stream
的另一种方法是根据给定条件过滤条目。流式传输的结果是一个Optional
,其中可能包含找到的Entry
:
if (nMap.entrySet().stream()
.filter(e -> !mMap.containsKey(e.getKey()) || mMap.get(e.getKey()) < e.getValue())
.findAny()
.isPresent()) {
return -1;
}