如何使用 Java8Stream 从一些类属性获得 List?

我有一个 List<Person>。我需要从 Person的属性获得一个 List

例如,我有一个 Person类:

class Person
{
private String name;
private String birthDate;
public String getName() {
return name;
}
public String getBirthDate() {
return birthDate;
}
Person(String name) {
this.name = name;
}
}


List<Person> personList = new ArrayList<>();
personList.add(new Person("David"));
personList.add(new Person("Joe"));
personList.add(new Person("Michel"));
personList.add(new Person("Barak"));

我想得到一个名称列表与 Stream API,像这样:

List<String> names = personList.stream().somecode().collect(Collectors.toList());
names.stream().forEach(System.out::println);


#David
#Joe
#Michel
#Barak

这个代码不起作用:

public class Main
{
public static void main(String[] args)
{
List<Person> personList = new ArrayList<>();
Person person = new Person("Иван");
person.getFriends().addAll(Arrays.asList("Друг 1", "Друг 2", "Друг 3"));
personList.add(person);
person = new Person("Федор");
person.getFriends().addAll(Arrays.asList("Друг 4", "Друг 5", "Друг 6"));
personList.add(person);
person = new Person("Алексей");
person.getFriends().addAll(Arrays.asList("Друг 7", "Друг 8", "Друг 9"));
personList.add(person);
person = new Person("Константин");
person.getFriends().addAll(Arrays.asList("Друг 10", "Друг 11", "Друг 12"));


List<String> friens = personList.stream().map(e->e.getFriends()).collect(Collectors.toList());


friends.stream().forEach(System.out::println);
//Друг 1
//Друг 2
//Друг 3
//Друг 4
//...


}
}


class Person
{
String name;
List<String> friends;


Person(String name) {
this.name = name;
}
public String getName() {
return name;
}


public List<String> getFriends() {
return friends;
}
}


如何使用 StreamAPI 获得属性的 List

255578 次浏览

你可以使用 map:

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

编辑:

为了合并好友名单,你需要使用 flatMap:

List<String> friendNames =
personList.stream()
.flatMap(e->e.getFriends().stream())
.collect(Collectors.toList());