1. List转Map
// key为某属性,value为某属性
Map<Integer, String> idNameMap = userList.stream().collect(Collectors.toMap(User::getId, User::getName));
System.out.println("idNameMap = " + idNameMap);
// key为某属性,value为对象本身(方法1)
Map<Integer, User> idUserMap1 = userList.stream().collect(Collectors.toMap(User::getId, user -> user));
System.out.println("idUserMap1 = " + idUserMap1);
// key为某属性,value为对象本身(方法2)
Map<Integer, User> idUserMap2 = userList.stream().collect(Collectors.toMap(User::getId, Function.identity()));
System.out.println("idUserMap2 = " + idUserMap2);
key值冲突问题:
如果key值冲突会报错如下:
java.lang.IllegalStateException: Duplicate key User(id=3, name=jack)
解决办法:
// key值冲突解决(后面的覆盖前面的)
Map<Integer, User> idUserMap = userList.stream().collect(Collectors.toMap(User::getId, user -> user, (key1, key2) -> key2));
System.out.println("idUserMap = " + idUserMap);
// key值冲突解决(自定义业务逻辑)
Map<Integer, User> idUserMap = userList.stream().collect(Collectors.toMap(User::getId, user -> user, (user1, user2) -> {
// 根据自己的业务逻辑,返回一个User对象即可
// 比如这里返回age较大的一个User
return (user1.getAge() > user2.getAge()) ? user1 : user2;
}));
System.out.println("idUserMap = " + idUserMap);
本文介绍了如何使用Java 8 Stream API将List转换为Map,重点讲解了key冲突的处理方法,包括默认覆盖和自定义业务规则。通过实例展示了如何根据需求选择不同的解决方案。

3081

被折叠的 条评论
为什么被折叠?



