java8使用Lambda表达式list转map-含实例解释

Public Map<String, String> findAllMap() {
List courseTypeList = findAll();
if (ObjectUtils.isNotNull(courseTypeList))
return courseTypeList.stream().collect(Collectors.toMap(CourseType:: getTypeKey, CourseType::getTypeName));
}

解释:

目标:得到一个Map<string,string>;

把courseTypeList流化(只有获取stream后才能进行后边的操作),

调用collect()重新统计成一个map<string,string>,

key,value分别使用CourseType类中的getTypeKey()和getTypeName()方法

等同于:

Map<String, String> map=new HashMap<String, String>();
for(CourseType c:courseTypeList){
map.put(c.getTypeKey(),c.getTypeName());
}


Map<Long, Long> subjectIdMap = Stream.of(condition.split(","))
.filter(StringUtils::isNumber)
.map(Long::valueOf)
.collect(Collectors.toMap(Function.identity(), Function.identity()));
List courseIdList = new LinkedList<>();
courses.forEach((v) -> {
if (!subjectIdMap.containsKey(v.getSubjectId())) {
courseIdList.add(v.getId());
}
});

解释:

    目标:得到一个Map<Long, Long>

    split将condition按逗号分割
    Stream.of转换对应的流
    filter获取其中的数字
    map转换成long类型
    collect合并成一个map,key和value都是转换后的数字!

Map<BigDecimal,SysTeacher> teacherMap = teacherList.stream().collect(Collectors.toMap(e -> e.getId(),e -> e));

解释:

    目标:得到一个Map<BigDecimal,SysTeacher>

把teacherList流化(只有获取stream后才能进行后边的操作),

调用collect()重新统计成一个Map<BigDecimal,SysTeacher>,

key,value分别使用SysTeacher类中的getId()和SysTeacher实体。


List shopList=shopBiz.getShopList(shopData,userId);

Map<String,List> shopListMap = shopList.stream().collect(Collectors.groupingBy(e->e.getShopType()));

解释:

    目标:得到一个Map<String,List<Shop>>

以getShopType分组,key是getShopType,value是List>


packageCourseMap.forEach((k, v) -> {
Map<Boolean, List> packageCourseListMap = v.stream().collect(Collectors.groupingBy(e -> StringUtils.isNotEmpty(e.getCourseTypeKey())));

}

解释:

同上,只是加了过滤条件而已


返回类型:Map<BigDecimal,SysTeacher>

List sysTeacherList;

return sysTeacherList.stream().collect(Collectors.toMap(BaseEntity::getId, e->e));

解释:

   将List<SysTeacher>转为Map<BigDecimal,SysTeacher>,SysTeacher.getId()作为key.                                                                    

Map<BigDecimal, String> group = orderDetails.stream() .collect(Collectors.groupingBy(OrderDetails::getShopId, Collectors.mapping((v) -> v.getUserId().toString(),
Collectors.collectingAndThen(Collectors.toList(), (v) -> v.stream().distinct().collect(joining(","))))));

解释:

key就是ShopId,String就是去重复后的用户id,按逗号拼接起来

在这里插入图片描述


Map<String, Integer> statisticsMap = Stream.of(classesIds.split(",")).collect(Collectors.toMap(Function.identity(), (v) -> 1));

解释:

Stream.of(classesIds.split(",")) 是将ids按逗号切割,然后返回一个流。

collect是收集。

Collectors.toMap(Function.identity(), (v) -> 1)),是将上面的流,转换成map。

Function.identity()是转成map的key,1是转成map的value。

在这里插入图片描述

它的意思是,返回一个总是返回其输入参数的函数。

其实就是上面的逗号截取后的每个值。

如果classesIds是 11,22,33
返回的map是:
11,1
22,1
33,1

原文链接:https://blog.csdn.net/Smile_Sunny521/article/details/89845647

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值