将List <CustomerOrder>分组到Map <Gender,Money>中

som*_*y99 4 java java-8 java-stream

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;
    }

}
Run Code Online (Sandbox Code Playgroud)

我想实现相当于java的java流:

SELECT Gender, SUM(orderAmount) FROM orders
GROUP BY Gender;
Run Code Online (Sandbox Code Playgroud)

谢谢!

编辑:我简化了问题 - CustomerOrder包含一个Order,其中包含orderAmount

我设法通过以下方式获得Map<Gender, List<Long>>:

Map<Gender, List<Long>> map = orders.stream()
    .collect(Collectors.groupingBy(CustomerOrder::getGender))
Run Code Online (Sandbox Code Playgroud)

Eug*_*ene 5

list.stream().collect(Collectors.groupingBy(CustomerOrder::getGender,
            Collectors.summingLong(CustomerOrder::getOrderAmmount));
Run Code Online (Sandbox Code Playgroud)

编辑

list.stream().collect(Collectors.groupingBy(CustomerOrder::getGender,
            Collectors.summingLong(co -> co.getOrder().getAmmount()));
Run Code Online (Sandbox Code Playgroud)

我没有编译它,但应该工作(有少量替换).