Java 按变量分组列表并计算对象变量的和
我必须使用流对给定列表中的元素进行分组。我想把它们放到map中(按变量分组)Java 按变量分组列表并计算对象变量的和,java,java-stream,mapping,grouping,Java,Java Stream,Mapping,Grouping,我必须使用流对给定列表中的元素进行分组。我想把它们放到map中(按变量分组) “vat”),然后计算每个键中每个对象变量的总和 我陷入了困境。我做了分组流,但现在,经过几个小时的编码,我仍然不知道该怎么做 功能代码: public static List<Product> calculatingTaxes(List<Product> products){ Map<Double, List<Product>> productT
“vat”),然后计算每个键中每个对象变量的总和 我陷入了困境。我做了分组流,但现在,经过几个小时的编码,我仍然不知道该怎么做 功能代码:
public static List<Product> calculatingTaxes(List<Product> products){
Map<Double, List<Product>> productTaxesMap = new HashMap<>();
productTaxesMap = products.stream()
.collect(Collectors.groupingBy(Product::getVat));
System.out.println(productTaxesMap);
return null;
}
产品类别代码:
public class Product {
private double netPrice;
private double vat;
private double vatAmount;
private double grossPrice;
public Product(double netPrice, double vat) {
this.netPrice = netPrice;
this.vat = vat;
this.grossPrice = netPrice * vat;
this.vatAmount = grossPrice - netPrice;
}
public double getNetPrice() {
return netPrice;
}
public double getVatAmount() {
return vatAmount;
}
public double getGrossPrice() {
return grossPrice;
}
public double getVat() {
return vat;
}
@Override
public String toString() {
return "Product{" +
"netPrice=" + netPrice +
", vat=" + vat +
", vatAmount=" + vatAmount +
", grossPrice=" + grossPrice +
'}';
}
我想要上面的函数,返回每个增值税键(0-8-23%)的净价格、总销售额和增值税金额的总和。
我尝试使用收集器收集和求和元素。grouppingBy()。通过过滤等,但没有一个有效。假设您的输入是:
List<Product> products = Arrays.asList(
new Product(100.0, 1.0),
new Product(100.0, 1.0),
new Product(100.0, 1.23),
new Product(100.0, 1.23),
new Product(100.0, 1.23),
new Product(100.0, 1.08),
new Product(100.0, 1.08)
);
“然后计算每个键中每个对象变量的总和”不确定这意味着什么。啊,我写的表格很复杂。我的意思是:合计0-8-23%键的净价、毛额和增值税金额(并将它们另存为对象),例如:23%增值税键-obj1(净价100,毛额123,增值税金额23),obj2(净价100,毛额123,增值税金额23)-函数应该返回obj3(净价200,毛额269,增值税金额69)@JakubKołacz我认为obj3应该是(净价200,毛额246,增值税金额46),不?是的,你是对的,我犯了一个错误
List<Product> products = Arrays.asList(
new Product(100.0, 1.0),
new Product(100.0, 1.0),
new Product(100.0, 1.23),
new Product(100.0, 1.23),
new Product(100.0, 1.23),
new Product(100.0, 1.08),
new Product(100.0, 1.08)
);
Map<Double, Product> vatToReducedProduct = products.stream()
.collect(Collectors.toMap(Product::getVat,
Function.identity(),
(p1, p2) -> new Product(p1.getNetPrice() + p2.getNetPrice(), p1.getVat())));
{
1.0=Product{netPrice=200.0, vat=1.0, vatAmount=0.0, grossPrice=200.0},
1.23=Product{netPrice=300.0, vat=1.23, vatAmount=69.0, grossPrice=369.0},
1.08=Product{netPrice=200.0, vat=1.08, vatAmount=16.0, grossPrice=216.0}
}