通过Collectors.groupingBy和映射来构建地图

时间:2018-11-25 16:07:00

标签: java java-8 java-stream

请查看下面的代码。我的意图是通过使用groupingBy和映射通过流API获得Map<String, List<Integer>>。用来获取此输出映射的逻辑是通过仅对ArrayList al的内容进行分组并计算同一元素出现的次数。

例如,元素A出现两次,因此我想获得一个映射,键为A,值为2。对于B,我想将B作为键,将3作为值。我只是不太了解如何为此实现映射功能。我能够编写分组。我可以在完成带有问号(????)的lambda方面获得帮助吗。

public static void main(String[] args) {
    ArrayList<String> al = new ArrayList<>();
    al.add("A");
    al.add("A");
    al.add("B");
    al.add("B");
    al.add("B");
    al.add("V");
    al.add("V");
    al.add("C");
    al.add("C");
    System.out.println(
             al.stream()
             .collect(groupingBy(Function.identity(), mapping(??????, toList()))));
}

1 个答案:

答案 0 :(得分:2)

您可以这样做

Map<String, Long> keyCountMap = al.stream()
        .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));

请注意使用下游收集器来计算计数。