collections - How i can get list from some class properties with java 8 stream -


good day. have list of person. need list property of person. example have person class:

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")); 

i want list of names stream api this:

list<string> names = personlist.stream().somecode().collect(collectors.tolist()); names.stream().foreach(system.out::println);  #david #joe #michel #barak 

how can lists property stream api? code don't work:

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;     } } 

that's basic, use map :

list<string> names =      personlist.stream()               .map(person::getname)               .collect(collectors.tolist()); 

edit :

in order combine lists of friend names, need use flatmap :

list<string> friendnames =      personlist.stream()               .flatmap(e->e.getfriends().stream())               .collect(collectors.tolist()); 

Comments