Search code examples
javajava-8java-streamcollectors

How to use stream in Java 8 to collect a couple of fields into one list?


For example I have class Person with name and surname fields.

I want to collect a List of String (names and surnames all together) from List of Person, 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?


Solution

  • 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());