Intro Java8 Object List To Map

Intro Java8 Object List To Map

這篇介紹Java8 Object List To Map。

Example

1
2
3
4
5
6
7
8
9
10
11
List data structure:
User (Long Id, String username)
List<User> userList = new ArrayList<>();
userList.add(new User(1L, "aaa"));
userList.add(new User(2L, "bbb"));
userList.add(new User(3L, "ccc"));
userList.add(new User(2L, "ddd"));
userList.add(new User(3L, "eee"));

1.Map<Long, String> map = userList.stream().collect(Collectors.toMap(User::getId, User::getUsername);
Error: java.lang.IllegalStateException: Duplicate key bbb

解決方法

1
2
3
4
5
6
7
8
9
1.Map<Long, String> map = userList.stream().collect(Collectors.toMap(User::getId, User::getUsername, (v1, v2) -> v1)); //取前面的值
2.Map<Long, String> map = userList.stream().collect(Collectors.toMap(User::getId, User::getUsername, (v1, v2) -> v2)); //取後面的值
3.Map<Long, List<String>> map = userList.stream().collect(Collectors.toMap(User::getId,
e -> new ArrayList<String>(Arrays.asList(e.getUsername())),
(List<String> oldList, List<String> newList) -> {
oldList.addAll(newList);
return oldList;
}));
//相同的key,把不同的value存在同一個List<String>