收集多个对象的属性,并返回一个新的 Map 列表
时间: 2024-05-05 21:15:12 浏览: 7
以下是一个 Java 代码示例,用于收集多个对象的属性,并返回一个新的 Map 列表:
```java
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ObjectPropertyCollector {
public static void main(String[] args) {
List<Person> people = new ArrayList<>();
people.add(new Person("John", 25));
people.add(new Person("Jane", 30));
people.add(new Person("Bob", 40));
List<Map<String, Object>> properties = collectProperties(people, "name", "age");
System.out.println(properties);
// Output: [{name=John, age=25}, {name=Jane, age=30}, {name=Bob, age=40}]
}
public static List<Map<String, Object>> collectProperties(List<?> objects, String... propertyNames) {
List<Map<String, Object>> properties = new ArrayList<>();
for (Object object : objects) {
Map<String, Object> propertyMap = new HashMap<>();
for (String propertyName : propertyNames) {
try {
Object propertyValue = object.getClass().getMethod("get" + propertyName.substring(0, 1).toUpperCase() + propertyName.substring(1)).invoke(object);
propertyMap.put(propertyName, propertyValue);
} catch (Exception e) {
e.printStackTrace();
}
}
properties.add(propertyMap);
}
return properties;
}
static class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
}
```
在该示例中,我们定义了一个 `Person` 类,它具有 `name` 和 `age` 两个属性。我们还定义了一个 `collectProperties` 方法,它接受一个对象列表和一个或多个属性名称作为参数,并返回一个新的 Map 列表,其中每个 Map 包含指定属性的值。在 `collectProperties` 方法中,我们使用反射获取每个对象的指定属性值,并将其添加到新的 Map 中。最后,我们将每个 Map 添加到列表中,并返回该列表。在 `main` 方法中,我们创建了一个 `Person` 列表,并调用 `collectProperties` 方法获取每个 `Person` 对象的 `name` 和 `age` 属性值,并将其打印到控制台。