Lambda填充地图
我试图用一个单词和它们的出现次数来填充地图。 我正在尝试写一个lambda来做它,就像这样:
Consumer wordCount = word -> map.computeIfAbsent(word, (w) -> (new Integer(1) + 1).intValue());
map
是Map
。 如果它不存在,它应该只是将地图中的单词作为键插入,如果它存在,它应该将其整数值增加1.这个语法不正确。
您不能使用computeIfAbsent
递增计数,因为它只会在第一次计算。
你可能意味着:
map.compute(word, (w, i) -> i == null ? 1 : i + 1);
这就是Collector
的用途。
假设你有一些Stream
:
Map countedWords = words .collect(Collectors .groupingBy( Function.identity(), Collectors.counting());
它无法编译,因为您无法在基元上调用方法:
new Integer(1) -> 1 // unboxing was applied (1 + 1).intValue() // incorrect
我会用Map#put
Map#getOrDefault
和Map#getOrDefault
写它:
Consumer consumer = word -> map.put(word, map.getOrDefault(word, 0) + 1);