介绍一下stream()流式转map用法
时间: 2023-07-22 19:03:10 浏览: 33
在Java 8中,可以使用stream()以流式方式处理集合中的元素。stream()方法返回一个Stream对象,可以对该流进行各种操作,如过滤、映射和收集。通过使用流式转换,可以将集合转换为Map对象。
下面是stream()流式转map的用法:
首先,我们需要创建一个包含若干键值对的集合对象,例如List或者Set:
```
List<String> list = Arrays.asList("apple", "banana", "orange", "pear");
```
然后,我们可以使用stream()方法将其转换为一个流。接着,我们可以使用Collectors.toMap()方法将流中的元素转换为Map对象:
```
Map<String, Integer> map = list.stream().collect(Collectors.toMap(Function.identity(), String::length));
```
上面的代码中,我们将list中的每个元素作为Map的键,将其长度作为Map的值。其中,Function.identity()表示将元素本身作为键,String::length表示将元素的长度作为值。最终,我们得到了一个类型为Map<String, Integer>的对象map,其中包含了所有的键值对。
需要注意的是,如果集合中存在重复的键,则会抛出IllegalStateException异常。此时,我们可以在Collectors.toMap()方法中添加一个额外的合并函数来解决重复键的问题,例如:
```
Map<String, Integer> map = list.stream().collect(Collectors.toMap(Function.identity(), String::length, (v1, v2) -> v1));
```
上面的代码中,我们通过添加一个合并函数(v1, v2) -> v1来解决重复键的问题。在这个合并函数中,我们选择保留第一个值(v1),并丢弃第二个值(v2)。
总之,stream()流式转map是Java 8中非常方便和高效的集合操作,可以大大提高代码的可读性和效率。