对同一对象中的值求和

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()
);