1. IntStream
1) range() / rangeClosed() 차이
range()
: 종료 값을 포함하지 않음.
rangeClosed()
: 종료값을 포함해서 반환.
예시
1
2
IntStream.range(0, 5).forEach(System.out::println); // 0~4
IntStream.rangeClosed(0, 5).forEach(System.out::println); // 0~5
2. map()
map()
연산은 스트림의 각 요소를 주어진 함수(Function)에 적용하여 새로운 스트림으로 변환(매핑)하는데 사용됨.- 원래의 데이터를 재가공하고 변환하는 용도(스트림에 있는 숫자들을 제곱한다거나, 객체의 특정 속성을 추출하는 등)로 사용.
- 원본 스트림을 변경하지 않고 새로운 스트림을 생성하므로, 원본 데이터를 유지한 채로 변환된 데이터를 다룰 수 있음.
1
2
3
4
5
6
7
8
9
10
@Data
// 다양한 곳에서 사용할 수 있도록 제네릭 타입을 이용해 DTO와 EN이라는 타입을 지정.
public class PageResultDTO<DTO, EN> {
private List<DTO> dtoList;
public PageResultDTO(Page<EN> result, Function<EN, DTO> fn) {
dtoList = result.stream().map(fn).collect(Collectors.toList());
}
}
3. boxed()
1) 사용 이유
IntStream
같이 원시 타입에 대한 스트림 자원을 클래스 타입(ex.IntStream -> Stream<Integer>
)으로 전환하여 전용으로 실행 가능한 기능을 수행하기 위함.
ex)int
자체로는Collection
에 못 담기 때문에Integer
클래스로 변환하여List<Integer>
로 담기 위해 사용.