如何在Java-8中填充地图

时间:2019-02-03 19:35:21

标签: java algorithm

  private static Map<Character, Integer> populateMap(List<Character> chars) {
        final Map<Character, Integer> inputStringCountMap  = new HashMap<Character, Integer>();
        for (Character ch : chars) {
            int val = 0;
            if (inputStringCountMap.containsKey(ch)) {
                val = inputStringCountMap.get(ch);
            }
            inputStringCountMap.put(ch, val + 1);
        }
        return inputStringCountMap;
    }

上面的函数只是填充Map(每个字符的计数)。 在Java-8中,有没有更短/更简洁的方法来做到这一点?

4 个答案:

答案 0 :(得分:8)

 private static Map<Character, Long> populateMap(List<Character> chars) {

    return chars.stream()
            .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));

}

答案 1 :(得分:5)

如果您对Map<Character, Long>感到满意,则应该使用带有计数子收集器的分组收集器来做到这一点:

Map<Character, Long> result = chars.stream().collect(
    Collectors.groupingBy(Function.identity(), Collectors.counting());

如果您要求值类型为Integer,则可以使用地图收集器来完成:

Map<Character, Integer> result = chars.stream().collect(
    Collectors.toMap(Function.identity(), c -> 1, Integer::sum);

答案 2 :(得分:2)

您可以尝试这样的事情。

Map<Character,Integer> myFreq= new HashMap<>();
for (char ch : input.toCharArray()) {
    myFreq.put(ch, myFreq.getOrDefault(ch, 0) + 1);
}

答案 3 :(得分:1)

这是另一种方式

for (Character ch : chars) {
    inputStringCountMap.merge(ch, 1, (a, b) -> a+b);
}