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);