stream()的Collectors.toMap
时间: 2023-08-16 19:15:59 浏览: 59
stream()的Collectors.toMap是一个用于将流中的元素转换为Map的收集器。它接受两个函数作为参数,一个用于提取Map的键,另一个用于提取Map的值。
语法如下:
```java
collect(Collectors.toMap(keyMapper, valueMapper))
```
其中,`keyMapper`是一个用于从流中的元素中提取键的函数,`valueMapper`是一个用于从流中的元素中提取值的函数。
示例代码:
```java
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
Map<String, Integer> nameLengthMap = names.stream()
.collect(Collectors.toMap(name -> name, name -> name.length()));
System.out.println(nameLengthMap);
```
以上代码将会输出:
```
{Alice=5, Bob=3, Charlie=7}
```
在这个示例中,`keyMapper`函数使用了Lambda表达式`name -> name`,即将每个元素本身作为键。`valueMapper`函数使用了Lambda表达式`name -> name.length()`,即将每个元素的长度作为值。最终通过`Collectors.toMap`收集器将流中的元素转换为了一个键值对应的Map。
相关问题
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 ]
list.stream collectors.tomap
`list.stream().collect(Collectors.toMap())` 是 Java 8 中的 Stream API 的一个用法,它可以将一个 List 转换成一个 Map。其中,List 中每个元素都被映射成一个 Map 的 key-value 对。
具体来说,`list.stream()` 将 List 转换成一个 Stream,然后通过 `collect(Collectors.toMap())` 方法将 Stream 中的元素收集到一个新的 Map 中。
`Collectors.toMap()` 方法有多个重载形式,最常用的一种形式接受两个 Function 对象,分别用于指定 key 和 value 的提取方式。例如:
```java
List<Person> people = Arrays.asList(
new Person("Alice", 20),
new Person("Bob", 30),
new Person("Charlie", 40)
);
Map<String, Integer> ageByName = people.stream()
.collect(Collectors.toMap(
person -> person.getName(), // key 提取函数
person -> person.getAge() // value 提取函数
));
```
上述代码中,`people` 是一个包含三个 Person 对象的 List。我们通过 `people.stream()` 将其转换成一个 Stream,然后通过 `collect(Collectors.toMap())` 方法将其中每个元素映射成一个 key-value 对,并以此构造一个新的 Map。其中,key 由 `person.getName()` 提取,value 由 `person.getAge()` 提取。
最终得到的 `ageByName` Map 的结构如下:
```
{
"Alice": 20,
"Bob": 30,
"Charlie": 40
}
```
注意,如果 List 中存在重复的 key,那么会抛出一个 `IllegalStateException` 异常。如果你需要处理这种情况,可以使用 `toMap()` 方法的另一种重载形式,该方法接受一个合并函数,用于指定当出现重复 key 时如何处理 value。例如:
```java
List<Person> people = Arrays.asList(
new Person("Alice", 20),
new Person("Bob", 30),
new Person("Charlie", 40),
new Person("Alice", 50)
);
Map<String, Integer> ageByName = people.stream()
.collect(Collectors.toMap(
person -> person.getName(),
person -> person.getAge(),
(age1, age2) -> age1 + age2 // 合并函数,将重复 key 的 value 相加
));
```
上述代码中,`people` 中有两个名字为 "Alice" 的 Person 对象,因此在转换成 Map 时会出现重复的 key。我们通过 `(age1, age2) -> age1 + age2` 指定了一个合并函数,用于将重复 key 的 value 相加。最终得到的 `ageByName` Map 的结构如下:
```
{
"Alice": 70,
"Bob": 30,
"Charlie": 40
}
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.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)