"Operator '<' cannot be applied to '<lambda parameter>', 'int' " 在 java

"Operator '<' cannot be applied to '<lambda parameter>', 'int' " in java

我在 lambda parameterint 之间进行运算时遇到了问题。代码写法如下:

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'
我想知道为什么以及是否有任何方法可以解决这个问题。

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

您的代码很容易修复:

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