用java流实现map-reduce

用java流实现map-reduce,java,java-8,mapreduce,java-stream,Java,Java 8,Mapreduce,Java Stream,我试图在java流中实现map-reduce范例这1命令。 例如,我有一个针对不同客户的订单列表,每个订单都有订单状态、客户id和订单金额: class Customer { String custId; String orderDate; String status; Integer amount; Customer(String custId, String orderDate, String status, Integer amount)

我试图在java流中实现map-reduce范例这1命令。 例如,我有一个针对不同客户的订单列表,每个订单都有订单状态、客户id和订单金额:

class Customer
{
    String custId;
    String orderDate;
    String status;
    Integer amount;

    Customer(String custId, String orderDate, String status, Integer amount)
    {
         this.custId = custId;
         this.orderDate = orderDate;
         this.status = status;
         this.amount = amount;
    }
}

List<Customer> customers = Arrays.asList(
       new Customer("cust1", "01/01/2018", "A", 500 ),
       new Customer("cust1", "01/03/2018", "A", 150),
       new Customer("cust1", "01/01/2018", "A", 100),
       new Customer("cust2", "01/01/2018", "A", 53),
       new Customer("cust2", "01/01/2018", "A", 15 ),
       new Customer("cust2", "01/01/2018", "A", 1500 ),
       new Customer("cust3", "01/01/2018", "A", 845),
       new Customer("cust3", "01/01/2018", "B", 47),
       new Customer("cust4", "01/01/2018", "A", 86));

有人知道吗?

为了为每个
客户
生成一个单独的总数,您需要根据客户ID对
客户
进行分组(使用
收集(Collectors.groupingBy())
)。然后,您可以使用
Collectors.summingit()
对每组
客户的金额求和:

Map<String,Integer> totals = 
    customers.stream()
    .filter(a->a.status.equals("A"))
    .collect(Collectors.groupingBy(Customer::getID,
                                   Collectors.summingInt(Customer::getAmount)));

谢谢!!这很有帮助
Map<String,Integer> totals = 
    customers.stream()
    .filter(a->a.status.equals("A"))
    .collect(Collectors.groupingBy(Customer::getID,
                                   Collectors.summingInt(Customer::getAmount)));
{cust1=750, cust2=1568, cust3=845, cust4=86}