list a 为省份,list b 为城市,map c 为各城市的人数,用java stream 写一个方法计算每个省总人数和
时间: 2024-03-02 15:48:19 浏览: 113
java 三种将list转换为map的方法详解
假设list a 和 list b 的长度相同,并且同一索引位置的元素对应同一个城市和省份,map c 的key为城市,value为人数。
可以按照以下步骤计算每个省的总人数和:
1. 将list a 和 list b 合并成一个新的list,每个元素为省份和城市的组合,例如:"浙江杭州"
2. 使用Collectors.groupingBy()方法对新的list进行分组,以省份为key,以城市为value集合。
3. 对每个省份的城市集合进行遍历,使用mapToInt()方法将每个城市的人数转为int类型,然后使用sum()方法求和,得到该省份的总人数和。
4. 将每个省份和其对应总人数和封装成一个Map返回。
具体实现代码如下:
```java
public static Map<String, Integer> calculateTotal(List<String> a, List<String> b, Map<String, Integer> c) {
return IntStream.range(0, a.size())
.mapToObj(i -> a.get(i) + b.get(i))
.collect(Collectors.groupingBy(
str -> str.substring(0, str.indexOf(" ")),
Collectors.mapping(str -> c.get(str.substring(str.indexOf(" ") + 1)), Collectors.summingInt(Integer::intValue))
));
}
```
其中,IntStream.range(0, a.size())生成一个从0到a.size()-1的整数流,遍历每个元素的索引i。使用mapToObj()方法将list a和list b合并成一个新的list,然后使用Collectors.groupingBy()方法按照省份进行分组,每个省份对应一个城市集合。在Collectors.mapping()方法中,将城市名称转为对应的人数,使用Collectors.summingInt()方法对每个省份的总人数进行求和。最终得到一个Map,其中key为省份,value为该省份的总人数和。
阅读全文