java 的Collectors.toMap怎么保持顺序
时间: 2025-05-18 14:11:13 浏览: 12
### 如何在使用 Java 的 `Collectors.toMap` 时保持顺序
当使用 `Collectors.toMap()` 方法时,默认情况下返回的是一个无序的 `HashMap`,这可能导致键值对的存储顺序与输入流中的顺序不一致。为了保持插入顺序,可以通过指定 `LinkedHashMap` 来替代默认的 `HashMap`。
以下是实现这一目标的具体方式:
通过向 `toMap` 提供第四个参数(工厂方法),可以自定义用于存储映射关系的目标容器类。例如,在下面的例子中,我们指定了 `LinkedHashMap::new` 工厂方法来创建一个新的 `LinkedHashMap` 实例[^3]。
```java
import java.util.*;
import java.util.stream.Collectors;
class Order {
private String orderNo;
private String name;
private Date date;
public Order(String orderNo, String name, Date date) {
this.orderNo = orderNo;
this.name = name;
this.date = date;
}
public String getOrderNo() {
return orderNo;
}
@Override
public String toString() {
return "Order{" +
"orderNo='" + orderNo + '\'' +
", name='" + name + '\'' +
'}';
}
}
public class Main {
public static void main(String[] args) {
List<Order> list = Arrays.asList(
new Order("339242501193350531", "苹果", new Date()),
new Order("339242501183340238", "香蕉", new Date()),
new Order("339242501180357433", "手机壳", new Date())
);
// 使用 LinkedHashMap 来保持顺序
Map<String, Order> orderMap = list.stream()
.collect(Collectors.toMap(
Order::getOrderNo,
order -> order,
(k1, k2) -> k1,
LinkedHashMap::new
));
System.out.println(orderMap);
}
}
```
在这个例子中,`LinkedHashMap::new` 被作为第四参数传递给 `toMap` 函数,从而确保生成的结果集按插入顺序排列[^3]。
#### 输出说明
运行以上代码后,打印出来的 `orderMap` 将严格按照原始列表中的顺序显示订单号及其对应的对象。
---
### 相关问题
阅读全文
相关推荐



















