java - lambda collecting within a ifPresent -
how can use collectors function collect within nested ifpresent method? far have.
list result = list.stream() .findfirst() .ifpresent(info -> { info.getmap().stream() .filter( entry -> entry.getkey().equals("test")) .map(entry::getvalue) .collect(collectors.tolist()) });
you might wanted this:
list result = list.stream() .limit(1) .flatmap(info -> // <-- removed brace { info.getmap().stream() .filter( entry -> entry.getkey().equals("test")) .map(entry::getvalue) ) // <-- removed brace here .collect(collectors.tolist()); let me explain:
.limit(1): limits stream first element (or returns empty stream if initial stream empty)
.flatmap(): maps stream new stream. in case new stream consisting of values entry#getvalue() returned
.collect(collectors.tolist()): @ last stream of values collected list.
as olivier grégoire said in comments, following work too:
list result = list.stream() .limit(1) .flatmap(info -> info.getmap().stream()) .filter( entry -> entry.getkey().equals("test")) .map(entry::getvalue) .collect(collectors.tolist()); which in opinion more readable , clearer indicates intents were.
Comments
Post a Comment