java - Stuck with java8 lambda expression -


i have map<integer,doctor> doclib=new hashmap<>(); save class of doctor.

class doctor has methods:getspecialization() return string,
getpatients() return collection of class person.

in main method, type:

public map<string,set<person>> getpatientsperspecialization(){     map<string,set<person>> res=this.doclib.entryset().stream().                          map(d->d.getvalue()).                          collect(groupingby(d->d.getspecialization(),                                             d.getpatients()) //error                                  );    return res; } 

as can see, have problem groupingby,i try send same value d method, it's wrong. how solve this?

you need second collector mapping :

public map<string,set<person>> getpatientsperspecialization(){     return this.doclib                .values()                .stream()                .collect(colectors.groupingby(doctor::getspecialization,                                              collectors.mapping(doctor::getpatients,toset()))                        ); } 

edit:

i think original answer may wrong (it's hard without being able test it). since doctor::getpatients returns collection, think code may return map<string,set<collection<person>>> instead of desired map<string,set<person>>.

the easiest way overcome iterate on map again produce desired map :

public map<string,set<person>> getpatientsperspecialization(){     return this.doclib                .values()                .stream()                .collect(colectors.groupingby(doctor::getspecialization,                                              collectors.mapping(doctor::getpatients,toset()))                        )                .entryset()                .stream()                .collect (collectors.tomap (e -> e.getkey(),                                            e -> e.getvalue().stream().flatmap(c -> c.stream()).collect(collectors.toset()))                         ); } 

perhaps there's way same result single stream pipeline, can't see right now.


Comments

Popular posts from this blog

powershell Start-Process exit code -1073741502 when used with Credential from a windows service environment -

twig - Using Twigbridge in a Laravel 5.1 Package -

c# - LINQ join Entities from HashSet's, Join vs Dictionary vs HashSet performance -