具有自定义逻辑的Java8求和函数 A类{ 双x; 双y } 列表列表=新的ArrayList()//它包含类对象的列表。
现在我想使用Java8从上面的列表中获取具有自定义逻辑的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){ 这个
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);