Collectors.toMap如何使用?
时间: 2024-05-21 14:09:16 浏览: 109
Collectors.toMap是Java 8中提供的一个收集器(Collector),它可以将流中的元素转换成一个Map对象。它的使用方法如下:
```java
Map<K, V> map = stream.collect(Collectors.toMap(keyMapper, valueMapper));
```
其中,keyMapper和valueMapper是Function接口的实现,用于将流中的元素映射成Map中的key和value。如果key有重复,则会抛出一个IllegalStateException异常。我们可以使用下面的方式来解决重复key的问题:
```java
Map<K, V> map = stream.collect(Collectors.toMap(keyMapper, valueMapper, mergeFunction));
```
其中,mergeFunction是一个BinaryOperator类型的函数接口,用于指定当出现重复key时,如何合并相应的value。例如,我们可以使用下面的方式来将两个字符串连接起来:
```java
Map<Integer, String> map = Stream.of("a", "b", "c", "d", "e")
.collect(Collectors.toMap(String::length, Function.identity(), (s1, s2) -> s1 + "," + s2));
```
上述代码中,我们使用了toMap方法将字符串流按照长度映射为一个Map对象,当key重复时,我们使用mergeFunction将两个字符串连接起来,最终输出结果为:{1=a,b,c,d,e, 2=aa,bb}.
阅读全文