java stream流 Collectors.toMap()三个入参的含义是什么?
时间: 2023-05-23 10:01:55 浏览: 66
Collectors.toMap() 方法有三个参数,它们的含义分别是:
1. keyMapper:用于生成 Map 中的 key 的函数。
2. valueMapper:用于生成 Map 中的 value 的函数。
3. mergeFunction:用于合并重复 key 的 value 的函数。如果不提供此参数,当出现重复 key 时会抛出 IllegalStateException 异常。
相关问题
java stream流 Collectors.toMap()三个入参的运用详解
Collectors.toMap() 是 Java Stream API 中常用的一个方法,它将 Stream 中的元素映射为 key-value 对,并返回一个 Map 对象。这个方法有三个入参,分别是 key 的映射函数、value 的映射函数和在 key 冲突时的处理函数。
key 的映射函数用于将 Stream 中的元素映射为 key,value 的映射函数用于将元素映射为 value。在 key 冲突时,处理函数会被调用,它接收两个参数,表示冲突的 key 对应的 value,函数需要返回一个新的 value,作为最终的 value。
比如以下代码:
```
List<Person> personList = Arrays.asList(
new Person("Alice", 25),
new Person("Bob", 30),
new Person("Cathy", 35),
new Person("David", 40)
);
Map<String, Integer> nameToAgeMap = personList.stream()
.collect(Collectors.toMap(Person::getName, Person::getAge));
System.out.println(nameToAgeMap);
```
这段代码中,我们将一个 Person 对象列表映射为一个以 name 作为 key,以 age 作为 value 的 Map。运行结果如下:
```
{Alice=25, Bob=30, Cathy=35, David=40}
```
其中,key 的映射函数为 Person::getName,value 的映射函数为 Person::getAge,由于没有冲突,因此不需要处理函数。
java stream Collectors.toMap
java stream Collectors.toMap是一个流式处理方法,用于将一个List集合转换为Map集合。它接受三个参数:第一个参数指定了作为Map的key值的属性或方法引用,第二个参数指定了作为Map的value值的属性或方法引用,第三个参数用于处理key重复的情况。 通过使用Collectors.toMap方法,可以将一个List集合中的元素按照指定的属性或方法引用作为key值,将整个对象或属性值作为value值,构建出一个key值唯一的Map集合。
举例来说,如果有一个List<proVo>对象的集合,我们希望将其中的proVo对象按照id作为key,name作为value,构建成一个Map集合,可以使用如下代码:
Map<Long, String> map = list.stream().collect(Collectors.toMap(proVo::getId, proVo::getName));
这样就可以得到一个key为id,value为name的Map集合。
另外,如果在转换过程中遇到了key重复的情况,可以通过第三个参数来处理。比如可以选择保留前一个元素的值,或者保留后一个元素的值,或者进行其他自定义的处理。 例如:
Map<Long, String> map = list.stream().collect(Collectors.toMap(proVo::getId, proVo::getName, (k1, k2) -> k1));
这样当遇到key重复的情况时,会保留前一个元素的值作为value。
总之,java stream Collectors.toMap方法是用于将List集合转换为Map集合的一个便捷方法,可以根据需求选择合适的参数来进行处理。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [java8stream源码-streams:用于针对旧设备的Android项目的java.util.stream库的非常不完整的重新实现](https://download.csdn.net/download/weixin_38690522/19389466)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *2* *3* [【业务功能篇35】Java Stream流 :Collectors.toMap](https://blog.csdn.net/studyday1/article/details/131454535)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)