java - Collectors.groupingBy 和 mapping 构造一个映射
问题描述
请看下面的代码。我的目的是Map<String, List<Integer>>
通过使用 groupingBy 和映射来通过流 API。用于获取此输出映射的逻辑是将 ArrayList al 的内容分组并计算相同元素出现的次数。
例如,元素 A 出现了两次,所以我想获得一个键为 A,值为 2 的映射。同样,对于 BI,我希望将 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()))));
}
解决方案
你可以这样做,
Map<String, Long> keyCountMap = al.stream()
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
注意使用下游收集器来计算计数。
推荐阅读
- javascript - 无法向对象添加属性,如何解决?
- javascript - 如何从类中访问变量?
- app-store - 从 TestFlight 到 AppStore
- python - 使 pynput 鼠标侦听器减少资源消耗
- python - 为什么我在 Python 中通过 Pandas 导出 CSV 文件时有两个引号?
- mysql - 从列中删除某些逗号分隔的数据
- c++ - 单 PID 双摆
- python - SCAPY FORM REQUEST 不返回任何数据
- python - Anaconda 每次在新的 conda 环境中安装软件包时都会下载软件包吗?
- python-3.x - 元组组件 16 中的形状不匹配。预期 [1,?,?,3],得到 [1,1,242,640,3]