我有一个具有不同属性的类。列表包含此类的对象。有些对象具有相同的名称(属性)。我现在想创建一个映射,其中键是名称,值是实际对象。
Map<String, Order> splittedListMap = listOfOrder.stream()
.collect(Collectors.toMap(
Order::getDriver,
Order::getOrder));
编译时收到以下消息: “线程“main”中出现异常 java.lang.IllegalStateException:重复键 Mike Miller(尝试合并值 com.xxxxxxxxxxxx”
如何在没有此异常的情况下执行此操作?
地图不能有重复项,因此如果遇到重复项,您需要将它们分组在同一键下。这是一种方法。
Map<String, List<Order>> splittedListMap = listOfOrder.stream()
.collect(Collectors.groupingBy(Order::getDriver));
所有同名司机都会出现在订单列表中。
如果您想要一个
Map<String, Order>
那么字符串应该是每个驱动程序的唯一值。它可能是某种 ID。然后你就可以像第一次尝试那样做。