如何减少 java 中对象的所有字段

How to reduce all the fields of object in java

我有一个包含所有数字字段的 Pojo class

public class Pojo {
    private long field1;
    private long field2;
    private long field3;
    private long field4;
    private long field5;
    private double field6;
    private double field7;
    private double field8;
    private double field9;
}

还有一个 Pojo 列表,我想将此列表映射到一个 Pojo 对象,该对象将在其字段中包含 pojos foe, list。我的意思是这样的:

public static void main(String[] args) {
    List<Pojo> pojoList = getPogoList();
    Pojo pojoInSum = reduceAllFields(pojoList);
}

在没有反射的情况下从列表中减少 pojo 的所有字段的最简单方法是什么?

最简单的方法就是在那个pojo中写一个方法。因为如果您在 class 中对事物建模,您应该公开行为而不是数据。

但我怀疑这就是您要找的东西,所以您可能想看看反射。 基本上,您检索 class 的所有字段,获取实例的值,然后在循环或流中对它们求和。

您可以使用 Stream#reduce 方法:

public void reducePojoList() {
    PojoReduce pojoReduce = new PojoReduce();

    List<Pojo> pojoList = Arrays.asList(
            new Pojo(3L, 4.0),
            new Pojo(6L, 1.1));

    Optional<Pojo> reducedPojo = pojoList.stream().reduce(this::combine);

    reducedPojo.ifPresent(System.out::println);
}

private Pojo combine(Pojo pojo1, Pojo pojo2) {
    return new Pojo(
            pojo1.getLongField() + pojo2.getLongField(),
            pojo1.getDoubleField() + pojo2.getDoubleField()
    );
}

您必须为添加的每个字段更新 combine 方法。您还会创建很多新对象。