从列表(集合)创建地图

问题描述 投票:0回答:1

我有一个具有不同属性的类。列表包含此类的对象。有些对象具有相同的名称(属性)。我现在想创建一个映射,其中键是名称,值是实际对象。

Map<String, Order> splittedListMap = listOfOrder.stream()
    .collect(Collectors.toMap(
        Order::getDriver, 
        Order::getOrder));

编译时收到以下消息: “线程“main”中出现异常 java.lang.IllegalStateException:重复键 Mike Miller(尝试合并值 com.xxxxxxxxxxxx”

如何在没有此异常的情况下执行此操作?

java arrays collections
1个回答
0
投票

地图不能有重复项,因此如果遇到重复项,您需要将它们分组在同一键下。这是一种方法。

Map<String, List<Order>> splittedListMap = listOfOrder.stream()
    .collect(Collectors.groupingBy(Order::getDriver));

所有同名司机都会出现在订单列表中。

如果您想要一个

Map<String, Order>
那么字符串应该是每个驱动程序的唯一值。它可能是某种 ID。然后你就可以像第一次尝试那样做。

© www.soinside.com 2019 - 2024. All rights reserved.