Java 8,比较两个地图并返回结果

时间:2018-10-11 07:11:18

标签: java lambda foreach java-8 java-stream

我正在比较使用Java 8功能的2张地图,并根据条件希望返回结果。使用 .forEach 会显示编译时错误,并且基本上,返回值是从Lambda表达式而不是循环返回的。如何从包含lambda的循环返回?
请注意,我没有比较两个地图对象的相等性

nMap.forEach((k,v) -> {
    if (!mMap.containsKey(k) || mMap.get(k) < v) {
        return -1;
    }
});

2 个答案:

答案 0 :(得分:8)

使用StreamentrySet()中的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;
}