Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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
具有自定义逻辑的Java8求和函数 A类{ 双x; 双y } 列表列表=新的ArrayList()//它包含类对象的列表。_Java - Fatal编程技术网

具有自定义逻辑的Java8求和函数 A类{ 双x; 双y } 列表列表=新的ArrayList()//它包含类对象的列表。

具有自定义逻辑的Java8求和函数 A类{ 双x; 双y } 列表列表=新的ArrayList()//它包含类对象的列表。,java,Java,现在我想使用Java8从上面的列表中获取sum(x-y) 通过使用流API提前感谢: Class A{ Double x; Double y } List aList = new ArrayList<>();//It contains list of A class object. import java.util.*; 导入java.util.stream.collector; 公共类TestSum{ 静态A类{ 私人双x; 私人双y; 公共A(双x,双y){ 这个

现在我想使用Java8从上面的列表中获取
sum(x-y)

通过使用流API提前感谢

Class A{
   Double x;
   Double y
}

List aList = new ArrayList<>();//It contains list of A class object.
import java.util.*;
导入java.util.stream.collector;
公共类TestSum{
静态A类{
私人双x;
私人双y;
公共A(双x,双y){
这个.x=x;
这个。y=y;
}
}
公共静态void main(字符串[]args){
列表列表=新的ArrayList();
增加(新的A(2.2,1.1));
增加(新的A(3.3,2.2));
//使用转换为DoubleStream
double d1=aList.stream()
.mapToDouble(a->a.x-a.y)
.sum();
系统输出打印项次(d1);
//使用收集器并获取DoubleSummaryStatistics
double d2=aList.stream()
.collect(收集器.summaringdouble(a->a.x-a.y))
.getSum();
系统输出打印项次(d2);
}
}
您可以尝试以下方法:

import java.util.*;
import java.util.stream.Collectors;

public class TestSum {

    static class A{
        private Double x;
        private Double y;

        public A(Double x, Double y) {
            this.x = x;
            this.y = y;
        }
    }

    public static void main(String[] args) {

        List<A> aList = new ArrayList<>();

        aList.add(new A(2.2, 1.1));
        aList.add(new A(3.3, 2.2));

        //using converting to DoubleStream
        double d1 = aList.stream()
                         .mapToDouble(a -> a.x-a.y)
                         .sum();

        System.out.println(d1);

        //using Collector and getting DoubleSummaryStatistics
        double d2 = aList.stream()
                         .collect(Collectors.summarizingDouble(a-> a.x-a.y))
                         .getSum();

        System.out.println(d2);
    }
}
您也可以使用此选项:

Sum of x - y of each A of the list: 10.0

您将获得相同的输出。

如果
aList
a
对象的列表,则始终使用
list
。请添加您迄今为止为解决此问题所做的工作;对于(A:aList)和+=A.x-A.y您应该使用小写的
d
表示双文本,因为它不太可能与
0
混淆。为什么
sum
是装箱的
double
,而不是原语
double
?没有任何理由。询问者在字段变量中使用了Double,这就是为什么,我只是保持了相同的类型@安德烈亚斯
Sum of x - y of each A of the list: 10.0
Double sumUsingStatistics = aList.stream()
            .mapToDouble(a -> a.x - a.y)
            .summaryStatistics()
            .getSum();

System.out.println("Sum of all x - y of each A of the list: " + sumUsingStatistics);