Lambda填充Map

时间:2018-04-12 07:44:28

标签: java dictionary collections java-8

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

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

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

3 个答案:

答案 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#putMap#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());
相关问题