stream流将list转map map
时间: 2025-01-19 16:56:25 浏览: 82
### 使用 Java Stream API 将 List 转换为 Map
在 Java 8 中,`Stream` API 提供了一种简洁而强大的方式来将 `List` 转换成 `Map`。这主要通过使用 `Collectors.toMap()` 方法实现。
#### 基本语法
为了完成这种转换,通常会定义一个流管道,在其中指定键和值的选择逻辑:
```java
import java.util.*;
import java.util.stream.Collectors;
public class Example {
public static void main(String[] args) {
List<Hosting> hostings = Arrays.asList(
new Hosting(1, "linode.com", 100_000L),
new Hosting(2, "heroku.com", 30_000L),
new Hosting(3, "digitalocean.com", 70_000L)
);
// Converting List to Map using Stream API and Collectors.toMap()
Map<Integer, String> hostingMap = hostings.stream().collect(Collectors.toMap(
Hosting::getId,
Hosting::getName));
System.out.println(hostingMap);
}
}
```
这段代码创建了一个名为 `hostingMap` 的映射表,它把每一个 `Hosting` 对象的 ID 映射到其名称上[^2]。
当存在重复键的情况时,可以提供第三个参数作为解决冲突的方式——即每当遇到相同的键时应采取的操作。例如,如果两个不同的 `Hosting` 实例共享同一个ID,则可以通过如下方法决定保留哪一个实例的名字:
```java
// Handling duplicate keys with merge function
Map<Integer, String> uniqueHostingMap = hostings.stream().collect(Collectors.toMap(
Hosting::getId,
Hosting::getName,
(existing, replacement) -> existing));
```
这里选择了保持原有的名字不变(`existing`),而不是替换为新的名字(`replacement`)[^1]。
对于更复杂的场景,比如想要基于某些条件筛选后再做转换,可以在调用 `.collect()` 方法前加入过滤器或其他中间操作符,如`.filter()`, `.map()`, 或者 `.sorted()` 等。
阅读全文
相关推荐

















