gpt4 book ai didi

Java-Stream - 在应用 Collector groupingBy 后将对象列表收集到一组字符串中

转载 作者:行者123 更新时间:2023-12-05 01:23:00 25 4
gpt4 key购买 nike

给定以下类(class) OrderItemOrder 的列表

@Getter
@AllArgsConstructor
@ToString
public class Order {
String customerName;
List<Item> items;
}

@Getter
@AllArgsConstructor
@ToString
@EqualsAndHashCode
public class Item {
long id;
String name;
}

我需要创建一个 map 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 :

Map<String, List<Order>> ordersByName =
orders.stream().collect(groupingBy(Order::getCustomerName));

Map<String, Set<Item>>或者更好Map<String, Set<String>>有一组项目名称?

因此,我的问题是:如何在应用 groupingBy 后将订单列表 转换为一组商品名称

最佳答案

你们非常亲密。

由于您需要将流元素不是转换为单个对象,而是从订单中提取项目集合 ,您需要一个不同的 collector - flatMapping() 而不是 mapping()

Map<String, Set<String>> itemsByCustomerName =
orders.stream().collect(Collectors.groupingBy(
Order::getCustomerName,
Collectors.flatMapping(order -> order.getItems().stream().map(Item::getName),
Collectors.toSet())));

关于Java-Stream - 在应用 Collector groupingBy 后将对象列表收集到一组字符串中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73011319/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com