Java stream list 转map
时间: 2023-07-05 12:28:20 浏览: 59
可以使用 Java 8 的 Stream API 将 List 转换为 Map。以下是一个示例代码:
假设有一个 List<Person>,其中 Person 的属性包括 id 和 name,我们想将列表转换为一个 Map,其中 id 作为键,name 作为值,可以使用以下代码:
```
List<Person> personList = new ArrayList<>();
// 添加一些人员信息到列表中
Map<Integer, String> personMap = personList.stream()
.collect(Collectors.toMap(Person::getId, Person::getName));
```
在上面的代码中,Person::getId 和 Person::getName 是方法引用,它们分别返回 Person 对象的 id 和 name 属性。collect(Collectors.toMap(...)) 方法将流中的元素转换为 Map。第一个参数指定 Map 的键,第二个参数指定 Map 的值,因为我们想要一个 Map<Integer, String>,所以将 id 作为键,name 作为值。
需要注意的是,如果列表中存在重复的键,会抛出 IllegalStateException 异常。为了解决这个问题,可以使用第三个参数来指定一个合并函数,例如:
```
Map<Integer, String> personMap = personList.stream()
.collect(Collectors.toMap(Person::getId, Person::getName, (existing, replacement) -> existing));
```
在上面的代码中,合并函数 (existing, replacement) -> existing 表示如果存在重复的键,保留已有的值。
相关推荐
![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)
![](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)
![xlsx](https://img-home.csdnimg.cn/images/20210720083732.png)