Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 按变量分组列表并计算对象变量的和_Java_Java Stream_Mapping_Grouping - Fatal编程技术网

Java 按变量分组列表并计算对象变量的和

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

我必须使用流对给定列表中的元素进行分组。我想把它们放到map中(按变量分组)
“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}
}