我有以下的代码
public static List<Integer> topKFrequent(int[] nums, int k) {
List<Integer> myList = new ArrayList<>();
HashMap<Integer, Integer> map = new HashMap<>();
for (int n : nums) {
if (!map.containsKey(n)) map.put(n, 1);
else map.put(n, map.get(n) + 1);
}
map.entrySet().stream()
.sorted(Map.Entry.<Integer, Integer>comparingByValue().reversed())
.limit(k)
.forEach((key, value) -> myList.add(key));
return myList;
}
forEach
抛出错误。
Error:(20, 16) java: incompatible types: incompatible parameter types in lambda expression
我该如何修复/避免这个错误?我不太确定如何应用这里解释问题的答案:Lambda Expression and generic method
编辑:根据答案,更正方法是将forEach中的lambda替换为:
.forEach((entry) -> myList.add(entry.getKey()));
BiConsumer<K,V>
转换为Consumer<Map.Entry<K,V>>
的实用方法是微不足道的... - Holgermap.merge(n, 1, Integer::sum);
替换if (!map.containsKey(n)) map.put(n, 1); else map.put(n, map.get(n) + 1);
。因此,不仅有Stream API,Collection API也有许多有用的新方法。 - Holger