我有订单流(来源是订单列表)。
每个订单都有一个客户和一个OrderLine列表。
我要实现的目标是在一张简单的列表中以客户为关键的地图,并将属于该客户的所有订单行作为值。
现在,通过执行以下操作,我现在管理的内容返回了Map<Customer>, List<Set<OrderLine>>>
:
orders
.collect(
Collectors.groupingBy(
Order::getCustomer,
Collectors.mapping(Order::getOrderLines, Collectors.toList())
)
);
我正在寻找直接从订单流中获取
Map<Customer, List<OrderLine>>
的方法,或者通过某种方式将我上面获得的Map<Customer>, List<Set<OrderLine>>>
流中的列表弄平。 最佳答案
您可以简单地使用Collectors.toMap
。
就像是
orders
.stream()
.collect(Collectors
.toMap(Order::getCustomer
, Order::getOrderLines
, (v1, v2) -> { List<OrderLine> temp = new ArrayList<>(v1);
temp.addAll(v2);
return temp;});
toMap
函数的第三个参数是合并函数。如果您没有明确提供它,并且有重复的键,那么在完成操作时它将引发错误。