考虑到下面的类`Order`和`Item`以及一组订单列表,请翻译以下内容:
我需要创建一个名为
输入示例:
给定以下类Order
和Item
,以及一组Order
订单列表。
@Getter
@AllArgsConstructor
@ToString
public class Order {
String customerName;
List<Item> items;
}
@Getter
@AllArgsConstructor
@ToString
@EqualsAndHashCode
public class Item {
long id;
String name;
}
我需要创建一个名为
Map<String,Set<String>> itemsByCustomerName
的映射,其中键是来自Order
的客户名称,并且是属于该客户名称的所有Item
名称的集合。输入示例:
List<Order> orders = List.of(
new Order("John", List.of(new Item(1, "A"), new Item(2, "B"), new Item(3, "C"))),
new Order("Alex", List.of(new Item(1, "A"), new Item(8, "H"), new Item(11, "K"))),
new Order("John", List.of(new Item(1, "A"), new Item(6, "F"), new Item(7, "G"))),
new Order("Alex", List.of(new Item(1, "A"), new Item(8, "H"), new Item(12, "L"))),
new Order("Dave", List.of(new Item(24,"X"), new Item(25,"Y"), new Item(26, "Z"))));
期望的输出将会是:
{Alex=[A, H, K, L], John=[A, B, C, F, G], Dave=[X, Y, Z]}
我尝试了很多方法,包括我下面的最后一次尝试,但都出现了编译错误。
Map<String, Set<String>> itemsByCustomerName =
orders.stream().collect(groupingBy(
Order::getCustomerName,
mapping(order -> order.getItems().stream().map(Item::getName), toSet())));
错误:
Required type:
Map<String, Set<String>>
Provided:
Map<String, Set<Object>>
no instance(s) of type variable(s) R exist so that Stream<R> conforms to String inference variable T
has incompatible bounds: equality constraints: String lower bounds: Stream<R81591>
如何获取按名称排序的订单地图:
Map<String, List<Order>> ordersByName =
orders.stream().collect(groupingBy(Order::getCustomerName));
如何将一个订单列表(list of orders)应用 groupingBy
后转换为包含商品名称的集合?是否需要将其转换为 Map<String, Set<Item>>
或更好的 Map<String, Set<String>>
形式?