Comment puis-je obtenir une liste de certaines propriétés de classe avec Java 8 Stream?

J’ai une List . J’ai besoin d’une List partir d’une propriété de Person .

Par exemple, j’ai une classe de Person :

 class Person { private Ssortingng name; private Ssortingng birthDate; public Ssortingng getName() { return name; } public Ssortingng getBirthDate() { return birthDate; } Person(Ssortingng name) { this.name = name; } } List personList = new ArrayList(); personList.add(new Person("David")); personList.add(new Person("Joe")); personList.add(new Person("Michel")); personList.add(new Person("Barak")); 

Je veux obtenir la liste des noms avec l’API Stream comme ceci:

 List names = personList.stream().somecode().collect(Collectors.toList()); names.stream().forEach(System.out::println); #David #Joe #Michel #Barak 

Ce code ne fonctionne pas:

 public class Main { public static void main(Ssortingng[] args) { List 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 friens = personList.stream().map(e->e.getFriends()).collect(Collectors.toList()); friends.stream().forEach(System.out::println); //Друг 1 //Друг 2 //Друг 3 //Друг 4 //... } } class Person { Ssortingng name; List friends; Person(Ssortingng name) { this.name = name; } public Ssortingng getName() { return name; } public List getFriends() { return friends; } } 

Comment puis-je obtenir une List d’une propriété avec l’API Stream ?

C’est basique, vous utilisez la map :

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

MODIFIER :

Pour combiner les noms de listes d’amis, vous devez utiliser flatMap :

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