获取列表中对象的属性列表

2022-08-31 14:54:44

当有一个 时,是否有可能从中获取所有列表?是否有准备好的调用,或者我必须编写一个foreach循环,例如:List<Person>person.getName()

List<Person> personList = new ArrayList<Person>();
List<String> namesList = new ArrayList<String>();
for(Person person : personList){
    namesList.add(personList.getName());
}

答案 1

Java 8 及更高版本:

List<String> namesList = personList.stream()
                                   .map(Person::getName)
                                   .collect(Collectors.toList());

如果您需要确保获得结果,则必须将最后一行更改为:ArrayList

                                    ...
                                    .collect(Collectors.toCollection(ArrayList::new));

Java 7 及更低版本:

Java 8 之前的标准集合 API 不支持此类转换。你必须编写一个循环(或者把它包装在你自己的一些“map”函数中),除非你转向一些更花哨的集合API/扩展。

(Java 代码段中的行正是我将要使用的行。

在Apache Commons中,您可以使用CollectionUtils.collectTransformer。

在番石榴中,您可以使用 Lists.transform 方法。


答案 2

您可能已经这样做了,但对于其他人

使用 Java 1.8

List<String> namesList = personList.stream().map(p -> p.getName()).collect(Collectors.toList());