代码之家  ›  专栏  ›  技术社区  ›  Abhinav Tyagi

Java8,比较两个映射并返回结果

  •  8
  • Abhinav Tyagi  · 技术社区  · 6 年前

    我在比较两张地图 使用Java8特性 并根据条件返回结果。使用 forEach先生 显示编译时错误,基本上,返回是从Lambda表达式返回,而不是从循环返回。如何从包围lambda的循环中返回?
    请注意,我没有比较两个贴图对象的相等性

    nMap.forEach((k,v) -> {
        if (!mMap.containsKey(k) || mMap.get(k) < v) {
            return -1;
        }
    });
    
    2 回复  |  直到 6 年前
        1
  •  8
  •   Eran    6 年前

    使用 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;
    
        2
  •  2
  •   fps    6 年前

    另一种方法是使用 Stream Optional 其中可能包含 Entry

    if (nMap.entrySet().stream()
            .filter(e -> !mMap.containsKey(e.getKey()) || mMap.get(e.getKey()) < e.getValue())
            .findAny()
            .isPresent()) {
        return -1;
    }