我有一个List<Person>. 我需要List从Person.
List<Person>
List
Person
例如,我有一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"));
我想使用StreamAPI 获取名称列表,如下所示:
Stream
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; } }
如何使用API获取List属性?Stream
您可以使用map:
map
List<String> names = personList.stream() .map(Person::getName) .collect(Collectors.toList());
编辑 :
为了组合朋友姓名列表,您需要使用flatMap:
flatMap
List<String> friendNames = personList.stream() .flatMap(e->e.getFriends().stream()) .collect(Collectors.toList());