How to use stream in Java 8 to collect a couple of fields into one list?
Solution 1
To get both names and surnames in the same list, you could do this:
List<String> set = persons.stream()
.flatMap(p -> Stream.of(p.getName(),p.getSurname()))
.collect(Collectors.toList());
Solution 2
When you're doing :
persons.stream().map(Person::getName).collect(Collectors.toSet())
The result is a Set<String>
that contains only the name
of the persons
.
Then you're recreating a stream from this Set
and not from your List<Person> persons
.
That's why you can not use Person::getSurname
to map this Set
.
The solution from @Alexis C. :
persons.stream().flatMap(p -> Stream.of(p.getName(), p.getSurname()).collect(Collectors.toSet())
must do the job.
Solution 3
Your code should look something like that:
persons.stream()
.map(person -> person.getName() + " " + person.getSurname)
.collect(Collectors.toList());
user2620644
Updated on November 02, 2020Comments
-
user2620644 over 3 years
For example I have class
Person
with name and surname fields.I want to collect a
List
ofString
(names and surnames all together) fromList
ofPerson
, but it seems that I can't use map twice per one list or can't use stream twice per list.My code is:
persons.stream() .map(Person::getName) .collect(Collectors.toSet()) .stream().map(Person::getSurname) .collect(Collectors.toList())
but it keeps telling me that
Person::getSurname
non-static method can't be referenced from static context.What am I doing wrong?