Lambda填充地图

我试图用一个单词和它们的出现次数来填充地图。 我正在尝试写一个lambda来做它,就像这样:

Consumer wordCount = word -> map.computeIfAbsent(word, (w) -> (new Integer(1) + 1).intValue()); 

mapMap 。 如果它不存在,它应该只是将地图中的单词作为键插入,如果它存在,它应该将其整数值增加1.这个语法不正确。

您不能使用computeIfAbsent递增计数,因为它只会在第一次计算。

你可能意味着:

 map.compute(word, (w, i) -> i == null ? 1 : i + 1); 

这就是Collector的用途。

假设你有一些Stream words

 Map countedWords = words .collect(Collectors .groupingBy( Function.identity(), Collectors.counting()); 

它无法编译,因为您无法在基元上调用方法:

 new Integer(1) -> 1 // unboxing was applied (1 + 1).intValue() // incorrect 

我会用Map#put Map#getOrDefaultMap#getOrDefault写它:

 Consumer consumer = word -> map.put(word, map.getOrDefault(word, 0) + 1);