Collectors.toMap
时间: 2023-06-30 19:19:48 浏览: 106
Java中 List《map》把里面map中某个key相同记录的其他key 的 value 合并
`Collectors.toMap` 是一个 `Collector` 工具类,它可以将一个流转换为一个 `Map` 集合。它需要两个参数,一个是表示 `Map` 的 key 值的 `Function`,另一个是表示 `Map` 的 value 值的 `Function`。例如:
```java
List<String> list = Arrays.asList("apple", "banana", "orange");
Map<String, Integer> map = list.stream().collect(Collectors.toMap(Function.identity(), String::length));
```
这个例子中,我们将一个字符串列表转换为了一个字符串长度的 `Map` 集合。其中,`Function.identity()` 表示将每个字符串作为 `Map` 的 key,`String::length` 表示将每个字符串的长度作为 `Map` 的 value。最终得到的 `Map` 集合为:
```
{apple=5, banana=6, orange=6}
```
如果流中存在重复的 key 值,则会抛出 `IllegalStateException` 异常。我们可以通过在 `toMap` 方法中传入第三个参数来解决这个问题,如下所示:
```java
Map<String, Integer> map = list.stream().collect(Collectors.toMap(Function.identity(), String::length, (a, b) -> a));
```
这里的第三个参数是一个 `BinaryOperator` 函数,用于解决 key 值重复的情况。在这个例子中,我们简单地将重复的 key 值的 value 值保留为之前的值,即 `(a, b) -> a`。
阅读全文