Collectors.toMap
时间: 2023-10-14 17:27:20 浏览: 152
Collectors.toMap 是一个 Java 8 中的静态方法,用于将一个 Stream 转换成一个 Map。它接受三个参数:
1. keyMapper:用于将 Stream 中的元素转换为 Map 中的键的函数;
2. valueMapper:用于将 Stream 中的元素转换为 Map 中的值的函数;
3. mergeFunction:用于解决相同键的元素的冲突的函数。
示例:
假设有一个包含 User 对象的 List:
```
List<User> users = Arrays.asList(
new User("Alice", 30),
new User("Bob", 25),
new User("Charlie", 35),
new User("Alice", 40)
);
```
我们可以使用 Collectors.toMap 将这个 List 转换为一个 Map,其中键是 User 的名字,值是 User 的年龄:
```
Map<String, Integer> nameToAge = users.stream()
.collect(Collectors.toMap(User::getName, User::getAge, (a, b) -> a));
```
上述代码中,keyMapper 是 User::getName,valueMapper 是 User::getAge,mergeFunction 是一个简单的 lambda 表达式 (a, b) -> a,它表示如果出现相同的键,则保留第一个键的值。最终结果是:
```
{
"Alice": 30,
"Bob": 25,
"Charlie": 35
}
```
如果我们不使用 mergeFunction,则会抛出一个 IllegalStateException,因为有两个键都叫做 "Alice"。如果我们使用一个合适的 mergeFunction,比如 (a, b) -> a + b,则最终结果将是:
```
{
"Alice": 70,
"Bob": 25,
"Charlie": 35
}
```
阅读全文