toMap(Function, Function) 返回一个 Collector,它将元素累积到一个 Map中,其键和值是将提供的映射函数应用于输入元素的结果。
如果映射的键包含重复项,则在执行收集操作时会抛出IllegalStateException。
Map<String, Map<String, Object>> lineOffMap = tmlLineOffBySubIdList.stream().
collect(Collectors.toMap(map -> map.get("subs_id").toString(), value -> value));
解释:
将tmlLineOffBySubIdList转化为key=subs_id,value=subs_id的这条记录,也就是某个对象用
Map
(这么做的目的就是最后我们要根据这个key也就是subs_id,去和主键为subs_id列表进行一个嵌套匹配)
处理方法:可以使用分组
Map<String, String> map = list.stream().
collect(Collectors.toMap(Student.getId(),Student.getName()));
Map<String, String> map = list.stream().
collect(Collectors.toMap(Student.getId(), e->e.getName()==null?"":e.getName()));
//这里的e也可以是其他字母 如 o -> o.getNmae() == null ? "" : e.getName()
Map<String, String> map = list.stream().
collect(Collectors.toMap(Student.getId(),Student.getName(),
(e1,e2)->e1+","+e2));
Map<String,List<Student>> map= list.stream().
collect(Collectors.groupingby(Student.getClass()));
举例
category_good_list[
{
category_id=1[
{
category_id=1
货物1
},
{
category_id=1
货物2
}
]
},
{
category_id=2[
{
category_id=2
货物3
},
{
category_id=2
货物4
}
]
},
timestamp:12873238123123
]
第一步:
Map<String, List<Map<String, Object>>> categoryIdMap =
orderOutCategoryGoodsList.stream().
collect(Collectors.groupingBy(map -> map.get("category_id").toString()));
//根据货物里面的category_id 进行分组;因为一个货品可能有多个货物;
第二步:
根据货品id,也就是category_id 和货品list进行匹配,因为已经分组了,所以货品id是唯一的;
for (Map<String, Object> tempCategoryMap : orderOutCategoryList) {
String categoryId = tempCategoryMap.get("category_id").toString();
tempCategoryMap.put("goodsList", categoryIdMap.get(categoryId));
categoryAndGoodsList.add(tempCategoryMap);
}
利用货品id把相应货物塞到货品列表里面,这样就可以得到,货品列表及其货品底下的货物列表(相当于树结构,枝干和它的孩子枝叶)
其他
List<Map<String, Object>> queryMapList = xxxService.queryMapList("statement", paraMap);
查到结果是list
meter_id
23080800000066
23080800000067
23080800000068
stream流的使用:
String meterId = queryMapList.stream().map(map -> map.get("meter_id").toString()).
collect(Collectors.joining(","));
分解介绍:queryMapList.stream()调用流
map(map -> map.get("meter_id")获取key也就是"meter_id"对应的每一个值
collect(Collectors.joining(","));最后要加上collect()这个一般是放在最后面使用的
Collectors.joining(",") 再利用"," 把每一个value拼接起来
最后就得到结果:String meterId ="23080800000066,23080800000067,23080800000068"
//要是还想得到 " meter_id" 为key "23080800000066,23080800000067,23080800000068"
为value的形式
就再new一个map即可:如下
Map<String, Object> hashMap = new HashMap<String, Object>();
hashMap.put("meter_id", meterId);