对象列表中属性值的总和
Sum of attribute value in Object List
我有一个订单,其中包含订单商品列表 。至于订单项目。
public class OrderItem {
private long itemId;
private String itemName;
private String ownerName;
private double value;
// all the related constructors, mutators and accessors are included.
}
如果在这个列表中我有以下项目
OrderItem(1,"item1","John",12.00);
OrderItem(2,"item2","John",385.00);
OrderItem(3,"item3","John",20.00);
OrderItem(4,"item4","Doe",19.00);
我想计算订单所有者姓名相同的价值总和。
例如如果所有者姓名为“John”,则 return 417.00,如果姓名为“Doe”,则为 19.00.
如何通过 Java 流执行此操作?非常感谢
对于这个问题,您可以简单地使用 for each 循环来迭代列表,如果 ownerName 与您要查找的名称匹配,则将其添加到您的总和中。
double sum = 0;
for (OrderItem item: yourListName){
if (item.getOwnerName().equals(nameYoureSearchingFor))
sum+=item.value;
}
如果要使用迭代器,可以使用:
OrderItem item;
double sum = 0;
Iterator<OrderItem> iterator = list.stream().iterator();
while(iterator.hasNext()){
item = iterator.next();
if (item.getOwnerName().equals(nameYoureLookingFor))
sum+= item.getValue();
}
你可以这样做
Double sum = list.stream()
.filter(orderItem -> orderItem.getItemName().equals("john"))
.mapToDouble(OrderItem::getValue)
.sum();
假设你有一个 OrderItems
的列表,我们可以按 ownerName
对它们进行分组,然后作为下游收集器进行求和:
List<OrderItem> items = List.of(
new OrderItem(1,"item1","John",12.00);
new OrderItem(2,"item2","John",385.00);
new OrderItem(3,"item3","John",20.00);
new OrderItem(4,"item4","Doe",19.00));
Map<String, Double> result = items.stream()
.collect(Collectors.groupingBy(OrderItem::ownerName,
Collectors.summingDouble(OrderItem::value)));
从 result
映射中,我们可以通过所有者名称获取每个值:
System.out.println(result.get("John")); //prints 417.00
我有一个订单,其中包含订单商品列表
public class OrderItem {
private long itemId;
private String itemName;
private String ownerName;
private double value;
// all the related constructors, mutators and accessors are included.
}
如果在这个列表中我有以下项目
OrderItem(1,"item1","John",12.00);
OrderItem(2,"item2","John",385.00);
OrderItem(3,"item3","John",20.00);
OrderItem(4,"item4","Doe",19.00);
我想计算订单所有者姓名相同的价值总和。
例如如果所有者姓名为“John”,则 return 417.00,如果姓名为“Doe”,则为 19.00.
如何通过 Java 流执行此操作?非常感谢
对于这个问题,您可以简单地使用 for each 循环来迭代列表,如果 ownerName 与您要查找的名称匹配,则将其添加到您的总和中。
double sum = 0;
for (OrderItem item: yourListName){
if (item.getOwnerName().equals(nameYoureSearchingFor))
sum+=item.value;
}
如果要使用迭代器,可以使用:
OrderItem item;
double sum = 0;
Iterator<OrderItem> iterator = list.stream().iterator();
while(iterator.hasNext()){
item = iterator.next();
if (item.getOwnerName().equals(nameYoureLookingFor))
sum+= item.getValue();
}
你可以这样做
Double sum = list.stream()
.filter(orderItem -> orderItem.getItemName().equals("john"))
.mapToDouble(OrderItem::getValue)
.sum();
假设你有一个 OrderItems
的列表,我们可以按 ownerName
对它们进行分组,然后作为下游收集器进行求和:
List<OrderItem> items = List.of(
new OrderItem(1,"item1","John",12.00);
new OrderItem(2,"item2","John",385.00);
new OrderItem(3,"item3","John",20.00);
new OrderItem(4,"item4","Doe",19.00));
Map<String, Double> result = items.stream()
.collect(Collectors.groupingBy(OrderItem::ownerName,
Collectors.summingDouble(OrderItem::value)));
从 result
映射中,我们可以通过所有者名称获取每个值:
System.out.println(result.get("John")); //prints 417.00