代码之家  ›  专栏  ›  技术社区  ›  NormalLLer

在java中,“运算符“<”不能应用于“<lambda参数>”,“int”

  •  1
  • NormalLLer  · 技术社区  · 3 年前

    我遇到了一个关于在 lambda parameter 和a int .代码编写如下:

    HashMap<Integer, Integer> testMap = new HashMap<>();
    testMap.put(1, 1);
    testMap.put(2, 2);
    testMap.entrySet().removeIf((key, value) -> value < 100);
    

    IDEA显示错误 Operator '<' cannot be applied to '<lambda parameter>', 'int'
    我想知道为什么,是否有任何方法来解决这个问题。

    1 回复  |  直到 3 年前
        1
  •  3
  •   knittl    3 年前

    Map#entrySet 返回a Set<Map.Entry<K,V>> Set 继承 removeIf from the Collection interface ,它需要 Predicate<? super E> ,即具有单个参数的谓词。 E 在这种情况下是 Map.Entry<K,V> (它仍然只是一个单独的对象,尽管它包含两个其他值:键和值)。键和值可通过访问 getKey() getValue() 方法。

    您的代码很容易修复:

    testMap.entrySet().removeIf(entry -> entry.getValue() < 100);