map list开发整理:包含分组,转换,统计求和
1、将Map 的 所有 value 或 key 转成 List
Map<Sting, Province> numMap;
List<Province> newProvince = numMap .values().stream().collect(Collectors.toList());
List<Sting> name= numMap .keySet().stream().collect(Collectors.toList());
2、将 list 的 元素的两个字段 作为 key, vaue 转成 map
List<Province> newProvince ;
Map<String, Long> topTime = newProvince .stream().collect(Collectors.toMap(Province::getName, Province::getTopTime));
出现重复时,取前面value的值,或者取后面放入的value值,则覆盖先前的value值Map<Long, String> map = userList.stream() .collect(Collectors.toMap(User::getId, User::getUsername, (v1, v2) -> v1))
3、将list 某个字段的值相加
List<City> cityList;
Long sum = cityList.stream().mapToLong(City::getTotal).sum();
4、list 分组转成map
List<City> cityList;
Map<String, List<City>> groupByCity
= cityList.stream().collect(Collectors.groupingBy(City::getName));
5、List抽取元素到新的List
List<City> city;
List<String> collect = city.stream().map(City::getTime).collect(Collectors.toList());
6、List 抽取合并里面子项List(根据条件选择需要的子项)
List<StatusDto> status = ;
Map<Long, StatusItemDto> deviceModelStatusItemMap = status.stream().map(StatusDto::getStatusItems).collect(Collectors.toList()).stream().map(item -> {
StatusItemDto results = new StatusItemDto();
for (StatusItemDto result : item) {
// 型号默认的状态项
if (result.getIsDefault()) {
results = result;
return results;
}
}
return null;
}).collect(Collectors.toMap(StatusItemDto::getStatusId, Function.identity()));数据结构是(目的是将status里面所有的statusItems 合并成一个列表,同时过滤statusItems 里面不需要的项)
"status": [
{
"id": 1,
"name": "状态1",
"statusItems": [
{
"id": 1,
"name": "正常",
"isDefault": false,
"statusId": 1,
"statusName": "状态1",
},
{"id": 2,
"name": "故障",
"statusId": 1,
"statusName": "状态1",
"isDefault": true,
}
],
},
]
执行结果是statusItems列表
7、List 抽取合并里面子项
// 合并,取第一个 Map<String, List<DeviceParameterValueDto>> valueMap = parameterValues.stream().collect(Collectors.groupingBy(DeviceParameterValueDto::getParameterCode)); Map<String, DeviceParameterValueDto> parameterValueMap = new HashMap<>(); valueMap.forEach((key, value) -> { parameterValueMap.put(key, value.get(0)); });
8、MAP key去重
重复选第一个
Map<String, Object> result = list.stream().flatMap(m -> m.entrySet().stream())
.collect(Collectors.toMap(m -> m.getKey(), m -> m.getValue(), (v1, v2) -> v1));重复选第二个
Map<String, Object> result = list.stream().flatMap(m -> m.entrySet().stream())
.collect(Collectors.toMap(m -> m.getKey(), m -> m.getValue(), (v1, v2) -> v2));
9、grouping By
grouping By 并根据条件进行选择(去重)
List<TestData> list = new ArrayList<>();
Map<String, TestData> map = list.stream().collect(
Collectors.groupingBy(TestData::getAddress, Collectors.collectingAndThen(
Collectors.reducing((t1, t2) -> t1.getAge() > t2.getAge() ? t1 : t2),
Optional::get
))
);