Java 反射累加集合字段并回设:高效处理数据聚合
以下是一个使用反射累加集合中指定字段并设置到原始对象的例子:
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) throws IllegalAccessException {
List<Person> persons = new ArrayList<>();
persons.add(new Person('Tom', 20, 100));
persons.add(new Person('Jerry', 30, 200));
persons.add(new Person('Alice', 25, 150));
int sum = 0;
for (Person person : persons) {
Class<?> clazz = person.getClass();
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
if (field.getName().equals('salary')) {
field.setAccessible(true);
int salary = (int) field.get(person);
sum += salary;
}
}
}
System.out.println('Total salary: ' + sum);
for (Person person : persons) {
Class<?> clazz = person.getClass();
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
if (field.getName().equals('totalSalary')) {
field.setAccessible(true);
field.setInt(person, sum);
}
}
}
for (Person person : persons) {
System.out.println(person);
}
}
static class Person {
private String name;
private int age;
private int salary;
private int totalSalary;
public Person(String name, int age, int salary) {
this.name = name;
this.age = age;
this.salary = salary;
}
@Override
public String toString() {
return 'Person{' +
'name=' + name + ''' +
', age=' + age +
', salary=' + salary +
', totalSalary=' + totalSalary +
'}';
}
}
}
输出结果:
Total salary: 450
Person{name='Tom', age=20, salary=100, totalSalary=450}
Person{name='Jerry', age=30, salary=200, totalSalary=450}
Person{name='Alice', age=25, salary=150, totalSalary=450}
在这个例子中,我们首先遍历了集合中的每个 Person 对象,并通过反射获取其所有字段。然后,我们判断字段名称是否为 'salary',如果是,则累加到总工资中。接着,我们再次遍历集合中的每个 Person 对象,查找名称为 'totalSalary' 的字段,并将总工资设置到该字段中。最后,我们格式化输出每个 Person 对象。
原文地址: https://www.cveoy.top/t/topic/lrAc 著作权归作者所有。请勿转载和采集!