Java 分组列表<;客户订单>;进入地图<;性别、金钱>;
我想实现java流媒体的等效功能:Java 分组列表<;客户订单>;进入地图<;性别、金钱>;,java,java-8,java-stream,Java,Java 8,Java Stream,我想实现java流媒体的等效功能: public class CustomerOrder { private final Gender gender; private final Order order; public Gender getGender() { return gender; } public Order getOrder() { return order; } } public class
public class CustomerOrder {
private final Gender gender;
private final Order order;
public Gender getGender() {
return gender;
}
public Order getOrder() {
return order;
}
}
public class Order {
private final long orderAmount;
public long getOrderAmount() {
return orderAmount;
}
}
谢谢
编辑:我过度简化了问题-CustomerOrder包含一个订单,其中包含orderAmount
我设法通过以下方式获得了地图
:
SELECT Gender, SUM(orderAmount) FROM orders
GROUP BY Gender;
Map Map=orders.stream()
.collect(收集器.groupingBy(CustomerOrder::getGender))
编辑
list.stream().collect(Collectors.groupingBy(CustomerOrder::getGender,
Collectors.summingLong(CustomerOrder::getOrderAmmount));
我没有编译这个,但应该可以工作(使用较小的替换)。您可以使用,它有3个参数:
- 生成关键点的映射函数
- 生成值的映射函数
- 一种合并函数,用于解决与同一键关联的值之间的冲突
list.stream().collect(Collectors.groupingBy(CustomerOrder::getGender,
Collectors.summingLong(co -> co.getOrder().getAmmount()));
你试过什么吗?是的,用我试过的方法编辑了问题。我已经编辑了问题,你能相应地更新你的答案吗?谢谢你的代码不太正确。collect方法接受一个或三个参数,而不是两个。您要查找的是
stream.collect(Collectors.groupingBy(CustomerOrder::getGender,Collectors.summingit(co->co.getOrder().getAmount())
,即带有2个参数的Collectors.groupingBy。
list.stream().collect(Collectors.groupingBy(CustomerOrder::getGender,
Collectors.summingLong(co -> co.getOrder().getAmmount()));
Map<Gender, Long> result = customerOrders.stream()
.collect(Collectors.toMap(
CustomerOrder::getGender,
co -> co.getOrder().getOrderAmount(),
Long::sum));
Map<Gender, Long> result = customerOrders.stream()
.collect(Collectors.toMap(
CustomerOrder::getGender,
co -> co.getOrder().getOrderAmount(),
Long::sum,
TreeMap::new));