有一个包含客户订单的集合。
List<Order> orderList;
Order包含以下字段: id_client - 唯一客户编号 status - 订单状态 cito - 订单紧急程度
如果一个客户有相同状态和cito的订单到一个集合,其他的到另一个集合,你如何根据条件拆分客户订单?
订单类
public class Order {
private int client_id;
private int type;
private String city;
public Order() {
}
public int getClient_id() {
return client_id;
}
public void setClient_id(int client_id) {
this.client_id = client_id;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
}
解决此类问题,使用 Stream API 比较方便,其中订单流
Stream<Order>按客户 ID 进行分组,然后使用收集器将订单按条件另外分成两个集合Collectors.partitioningBy,为此需要传递一个谓词功能。这样就得到了一张地图
Map<Long, Map<Boolean, List<Order>>>。实现示例(使用Lombok注解):
测试:
如果需要更多详细信息,订单列表可以分别按每个状态和其他字段分组,分别使用
Collectors.groupingBy而不是Collectors.partitioningBy,嵌套映射中的键将是状态字段的类型。