我有订单流(来源是订单列表)。
每个订单都有一个客户和一个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函数的第三个参数是合并函数。如果您没有明确提供它,并且有重复的键,那么在完成操作时它将引发错误。

09-12 03:52