对同一对象中的值求和
Sum values in the same object
我有一个对象有很多属性
我想在一个名为 sumOfValues 的属性中对所有 50 个值求和;
另外,valueX 可以为 null,这就是我使用 Double 的原因
与java8.
public class MyObject {
private String id;
private String name;
private Double value1;
private Double value2;
....
private Double value50;
private Double sumOfValues;
}
编辑:
所有值都必须存储在数据库中,所以我无法创建列表
这不是一个好主意,并且不适用于流,但是,您可以定义一个数组或列表来存储所有 Double
值,在这种情况下,您可以执行以下求和所有的值。即
使用数组时:
double sum1 = Arrays.stream(array).filter(Objects::nonNull).mapToDouble(x -> x).sum();
使用列表时:
double sum1 = myList.stream().filter(Objects::nonNull).mapToDouble(e -> e).sum();
您可以使用 java 反射来解决这个问题。
我正在考虑您的 class 为所有字段设置 getter 和设置器;
所以 valueX
的 getter 将是 getValueX()
myObject.setSumOfValues(
Arrays.stream(myObject.getClass().getMethods())
.filter(method -> method.getName().contains("getValue"))
.mapToDouble(method -> {
try {
Double result = (Double) method.invoke(myObject);
return result != null ? result : 0;
} catch (IllegalAccessException | InvocationTargetException ignored) {
return 0;
}
})
.sum()
);
我有一个对象有很多属性
我想在一个名为 sumOfValues 的属性中对所有 50 个值求和;
另外,valueX 可以为 null,这就是我使用 Double 的原因
与java8.
public class MyObject {
private String id;
private String name;
private Double value1;
private Double value2;
....
private Double value50;
private Double sumOfValues;
}
编辑:
所有值都必须存储在数据库中,所以我无法创建列表
这不是一个好主意,并且不适用于流,但是,您可以定义一个数组或列表来存储所有 Double
值,在这种情况下,您可以执行以下求和所有的值。即
使用数组时:
double sum1 = Arrays.stream(array).filter(Objects::nonNull).mapToDouble(x -> x).sum();
使用列表时:
double sum1 = myList.stream().filter(Objects::nonNull).mapToDouble(e -> e).sum();
您可以使用 java 反射来解决这个问题。
我正在考虑您的 class 为所有字段设置 getter 和设置器;
所以 valueX
的 getter 将是 getValueX()
myObject.setSumOfValues(
Arrays.stream(myObject.getClass().getMethods())
.filter(method -> method.getName().contains("getValue"))
.mapToDouble(method -> {
try {
Double result = (Double) method.invoke(myObject);
return result != null ? result : 0;
} catch (IllegalAccessException | InvocationTargetException ignored) {
return 0;
}
})
.sum()
);