如何减少 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
方法。您还会创建很多新对象。
我有一个包含所有数字字段的 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
方法。您还会创建很多新对象。