toMap(二)

2021-02-04

java

一切的美德都包含在自我信赖里。——爱默森

今天继续聊聊StreamJdk8已经为我们封装好的这个Collectors.toMap

前两天写的List to Map工具类是为了解决key重复问题

实际上我们可以用Collectors.toMap的重载直接解决,例如

1
2
List<User> userList = new ArrayList<>(10);
Map<Integer, User> userMap = userList.stream().collect(Collectors.toMap(User::getId, Function.identity(), (user1, user2) -> user2));

我们在toMap的第三个参数给定,这里我们直接返回user2,意思是如果遇到重复的key[例如这里的userId重复],我们使用第二个user,也就是后者去覆盖前者

除了这点,我们还可以看到一个包含四个参数的重载

image-20210204201316848

这里第四个参数是用于返回指定的map使用的

例如我们需要返回一个LinkedHashMap

就可以这样写

1
userMap = userList.stream().collect(Collectors.toMap(User::getId, Function.identity(), (user1, user2) -> user2, LinkedHashMap::new));

第四个参数接收的是一个Supplierlambda写法就是()->这样啦!