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