java Lambda表达式List快速转Map

工作经常会遇到list转为map的情况,可能我们只需要某个字段的值转为map集合,在jdk8以前,我们更多地可能会用for循环的方式,然后put到map中去,有了jdk8之后,我们可以使用简单的一句话,就可以搞定

List<UserBean> userList = new ArrayList<>();
		UserBean userBean = new UserBean("张三","热爱学习", 21);
		userList.add(userBean);
		
		 userBean = new UserBean("张三2","热爱学习2", 25);
		userList.add(userBean);
		
		 userBean = new UserBean("张三33","热爱学习3", 27);
		userList.add(userBean);
		
		 userBean = new UserBean("张三4","热爱学习2", 26);
		userList.add(userBean);
		
		System.out.println(userList);
		Map<String,Integer>  map = 	    
        userList.stream().collect(Collectors.toMap(UserBean::getUserName, UserBean::getAge, 
        (key1,key2) ->key2));
		
		System.out.println(map);

关键语句:Map<String,Integer> map = userList.stream().collect(Collectors.toMap(UserBean::getUserName, UserBean::getAge,(key1,key2) ->key2));解释

key值重复报错信息:
Exception in thread “main” java.lang.IllegalStateException: Duplicate key 21
at java.util.stream.Collectors.lambda$throwingMerger 0 ( U n k n o w n S o u r c e ) a t j a v a . u t i l . H a s h M a p . m e r g e ( U n k n o w n S o u r c e ) a t j a v a . u t i l . s t r e a m . C o l l e c t o r s . l a m b d a 0(Unknown Source) at java.util.HashMap.merge(Unknown Source) at java.util.stream.Collectors.lambda 0(UnknownSource)atjava.util.HashMap.merge(UnknownSource)atjava.util.stream.Collectors.lambdatoMap$58(Unknown Source)
at java.util.stream.ReduceOps 3 R e d u c i n g S i n k . a c c e p t ( U n k n o w n S o u r c e ) a t j a v a . u t i l . A r r a y L i s t 3ReducingSink.accept(Unknown Source) at java.util.ArrayList 3ReducingSink.accept(UnknownSource)atjava.util.ArrayListArrayListSpliterator.forEachRemaining(Unknown Source)
at java.util.stream.AbstractPipeline.copyInto(Unknown Source)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(Unknown Source)
at java.util.stream.AbstractPipeline.evaluate(Unknown Source)
at java.util.stream.ReferencePipeline.collect(Unknown Source)
at test.LamdaTest.abc(LamdaTest.java:32)
at test.LamdaTest.main(LamdaTest.java:12)

指定返回的Map为哪种类型:
Map<String,Integer> map = userList.stream().collect(Collectors.toMap(UserBean::getUserName, UserBean::getAge,(key1,key2) ->key2, LinkedHashMap::new));

要注意的坑:value的值不能为null,否则会报错

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值