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