자바 Stream에서 Map, Object내부에 또 다른 Map, Set, List와 같은 Collection이 있을 때 각 value를 개별된 값으로 처리하고 싶은 경우
Student POJO
public class Student {
private String name;
private Set<String> book;
public void addBook(String book) {
if (this.book == null) {
this.book = new HashSet<>();
}
this.book.add(book);
}
//getters and setters
}
flatMap() and Set example
1차적으로 map으로 POJO에 Set에 담긴 Book데이터를 가져와 flatmap으로 펼친 후 list로 collect
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class TestExample2 {
public static void main(String[] args) {
LexiconMain.Student obj1 = new LexiconMain.Student();
obj1.setName("mkyong");
obj1.addBook("Java 8 in Action");
obj1.addBook("Spring Boot in Action");
obj1.addBook("Effective Java (2nd Edition)");
LexiconMain.Student obj2 = new LexiconMain.Student();
obj2.setName("zilap");
obj2.addBook("Learning Python, 5th Edition");
obj2.addBook("Effective Java (2nd Edition)");
List<LexiconMain.Student> list = new ArrayList<>();
list.add(obj1);
list.add(obj2);
List<String> collect =
list.stream()
.map(x -> x.getBook()) //Stream<Set<String>>
.flatMap(x -> x.stream()) //Stream<String>
.distinct()
.collect(Collectors.toList());
collect.forEach(x -> System.out.println(x));
}
}
Output
Spring Boot in Action Effective Java (2nd Edition) Java 8 in Action Learning Python, 5th Edition
Stream관련 자세한 예제가 더 궁금하다면 아래 링크로
'Programming > Java,Spring' 카테고리의 다른 글
[ Spring ] 스프링에서 Zookeeper connect시 ClosedChannelException (0) | 2018.11.20 |
---|---|
[ Java ] 자바 map byte사이즈 얻고 싶은 경우 (0) | 2018.10.29 |
[ Java8 ] Stream Collectors toMap 중복키처리하기(Duplicate Key error) (1) | 2018.08.09 |
[ SpringBoot] 스프링부트 순차적 방식과 비동기처리(asyn애노테이션), Completablefuture와 성능 비교 (0) | 2018.06.26 |
[ SpringBoot ] application.properties server.port이외에 추가 port 사용하기 (0) | 2018.02.27 |