stream流tomap
时间: 2023-10-12 11:04:49 浏览: 95
stream流是Java 8引入的一种处理集合数据的方式,它提供了一组功能强大的操作,可以在集合上进行过滤、映射、排序等操作。要将Stream流转换为Map,可以使用`Collectors.toMap()`方法。
下面是一个示例代码,展示了如何将一个Stream流转换为Map:
```java
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class StreamToMapExample {
public static void main(String[] args) {
// 创建一个包含键值对的Stream流
Stream<String> stream = Stream.of("Apple", "Banana", "Cherry", "Durian");
// 将Stream流转换为Map,键为字符串的长度,值为字符串本身
// 如果存在多个键值相同的元素,会抛出IllegalStateException异常
// 可以使用第三个参数解决冲突,例如使用旧值或新值
// 如果不指定解决冲突的方式,默认会抛出IllegalStateException异常
// 这里使用Collectors.toMap()方法进行转换
// keyMapper指定键的生成方式,valueMapper指定值的生成方式
// 如果要指定解决冲突的方式,可以使用mergeFunction参数
// 例如:Collectors.toMap(keyMapper, valueMapper, (oldValue, newValue) -> oldValue)
// 这里通过方法引用方式生成键和值
// 最终返回的是一个Map对象
Map<Integer, String> map = stream.collect(Collectors.toMap(String::length, s -> s));
// 输出转换后的Map
System.out.println(map);
}
}
```
运行以上代码,将会输出以下结果:
```
{5=Apple, 6=Banana, 6=Cherry, 6=Durian}
```
可以看到,Stream流中的元素被转换为了一个Map对象,其中键为字符串的长度,值为字符串本身。注意,由于存在多个长度相同的字符串,所以在转换过程中会抛出一个`IllegalStateException`异常。如果需要解决冲突,可以在`toMap()`方法中指定解决冲突的方式。
阅读全文