[java] stream example

stream 도는 오브젝트에 추가적인 행위를 하기

1
2
3
4
list.stream()
.map(mapper::toEntity)
.peek(e -> e.setParent(parent))
.forEach(childRepository::save);

peek을 이용하여 중간중간 메서드들을 호출 가능하다.

Stream을 이용하여 노출순서 정렬하기

1
2
3
4
5
6
7
8
9
10
11
12
AtomicInteger i = new AtomicInteger(0);
SomeDTOList.stream()
.sorted(Comparator.comparingInt(SomeDTO::getDisplayOrder))
.peek(dto -> dto.setDisplayOrder(i.incrementAndGet()))
.peek(dto -> {
AtomicInteger j = new AtomicInteger(0);
dto.getChildren().stream()
.sorted(Comparator.comparingInt(SomeChildDTO::getDisplayOrder))
.forEach(c -> c.setDisplayOrder(j.incrementAndGet()));
})
.map(itemOptionMapper::toEntity)
.forEach(repository::save);

자식들의 속성들까지 들고와 하나의 리스트로 합치기

1
2
3
4
Stream.of(category)
.flatMap(c -> c.getChildCategories().stream())
.map(Category::getId)
.collect(Collectors.toList())