gpt4 book ai didi

Java 8 : Merge two list of objects by id

转载 作者:行者123 更新时间:2023-11-30 08:37:53 25 4
gpt4 key购买 nike

我有两个对象列表。 PersonPurchaseOrder

Person 有姓名、年龄、身份证等。
PurchaseOrder 有一个 personId(FK Person id)、时间戳、金额等。

使用 Java 8,如何获取年龄 < 18 岁的人的平均采购订单金额?

List<Person> personList = Arrays.asList(person);
List<PurchaseOrder> purchaseOrderList = Arrays.asList(purchaseOrders);

List<Person> underAgePerson = personList.stream()
.filter(p -> p.getAge < 18)
.collect(Collectors.toList());

// TODO:
purchaseOrderList.stream()
.forEach(o1 -> underAgePerson.stream()
.filter(o2 -> o1.getPersonId() == o2.getId()));

purchaseOrderList.stream().mapToDouble(o2 -> Long.valueOf(o2.getAmount())).average();

最佳答案

我会创建一组小于 18 岁的 Person id,然后计算他们的平均购买量:

List<Person> persons = Arrays.asList(
new Person(1, 18), //(id, age)
new Person(2, 24),
new Person(3, 14),
new Person(4, 10)
);

//Same person can place multiple purchases.
List<PurchaseOrder> purchaseOrders = Arrays.asList(
new PurchaseOrder(1, 24), //(person id, purchase amount)
new PurchaseOrder(1, 40),
new PurchaseOrder(2, 10),
new PurchaseOrder(2, 24),
new PurchaseOrder(3, 23),
new PurchaseOrder(3, 45),
new PurchaseOrder(4, 68),
new PurchaseOrder(4, 12),
new PurchaseOrder(4, 23)
);

Set<Integer> personIds = persons
.stream()
.filter(person -> person.getAge() < 18)
.map(Person::getId)
.collect(Collectors.toSet());

OptionalDouble average = purchaseOrders
.stream()
.filter(purchaseOrder -> personIds.contains(purchaseOrder.getPersonId()))
.mapToInt(PurchaseOrder::getAmount)
.average();

关于Java 8 : Merge two list of objects by id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36870225/

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