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
Post a Comment