【发布时间】:2019-05-31 20:38:08
【问题描述】:
假设我有一个对象列表,让我们调用这个对象 Order,它有一个数量和价格作为字段。
例如如下:
对象Order(字段quantity和price)列表包含以下值:
Quantity Price
5 200
6 100
3 200
1 300
现在我想使用 Java-8 来获取按以下方式过滤的列表:
Quantity Price
8 200
6 100
1 300
Price 是要从中过滤的唯一值,并对价格的任何数量求和,我想在此基础上形成一个新列表。
请建议我如何使用 java 8 lambda 表达式做到这一点,谢谢。
【问题讨论】:
-
你也应该提供你的尝试:)
-
我的尝试太尴尬了,不能在这里展示 lol @Nikolas
-
这从不尴尬!它可以帮助我们提供更好的答案,为您提供反馈并帮助您修复当前的解决方案。继续并发布它。 :)
-
啊,我找到你了。试试这个:
List<Order> buyOrdersSummed = orders.stream().collect(Collectors.collectingAndThen(Collectors.groupingBy(Order::getPrice), map -> map.entrySet().stream().map(e -> new Order(e.getKey(), e.getValue().get(0).getUserId(), e.getValue().stream().mapToInt(i -> i.getQuantity()).sum())).collect(Collectors.toList())));。分组将使用相同的键进行,但不是summingInt,而是让生成List<Order>. Then in thefinisher`,您使用这些命令来计算userId(我假设第一个)和quantity作为总和并传递它全部到一个新对象。 -
@Nikolas 哇,谢谢。多亏了你,我今天学到了很多东西:)
标签: java list arraylist java-8 java-stream