Web/JAVA
[Java Stream] skip() vs limit()
태애니
2023. 4. 23. 18:21
728x90
skip() 과 limit() 의 차이
skip() method
skip(n)
stream 의 n번째 요소를 버리는 중간 작업
n은 음수일 수 없으며, stream 보다 크기가 클 경우 빈 스트림을 리턴시킴
Stream.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
.filter(i -> i % 2 == 0)
.skip(2)
.forEach(i -> System.out.print(i + " "));
6 8 10 이 나옴
filter 에서 2, 4, 6, 8, 10 이 나옴
여기서 skip 2 << 두개 뺌
skip() 연산은 매 순간 보이는 요소의 상태를 유지한다
그래서 skip() 을 stateful operation 상태저장작업 이라고 한다
limit() method
limit(n) 은 요청된 n보다 길지 않은 stream을 리턴시켜주는 중간 작업이다
n 매개변수는 음수일 수 없다
Stream.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
.filter(i -> i % 2 == 0)
.limit(2)
.forEach(i -> System.out.print(i + " "));
2,4,6,8,10 중에
limit(2) -> 2개만 가져옴
2,4
limit() 또한 위와 마찬가지로 stateful operation 상태저장작업 이라고 한다
전체 stream을 소비하는 skip() 과 달리 limit은 최대 항목 수에 도달하면 바로 결과 스트림을 반환시켜준다
그래서 limit()는 short-circuiting operation라고도 한다
infinite streams, limit() can be very useful for truncating a stream into a finite one
무한스트림 작업 시에 이를 finite할 수 있다
Stream.iterate(0, i -> i + 1)
.filter(i -> i % 2 == 0)
.limit(10)
.forEach(System.out::println);
숫자의 무한 스트림을 10개의 짝수만 있는 스트림으로 잘라준다.
Combining skip() and limit()
private static List<Integer> getEvenNumbers(int offset, int limit) {
return Stream.iterate(0, i -> i + 1)
.filter(i -> i % 2 == 0)
.skip(offset)
.limit(limit)
.collect(Collectors.toList());
}
728x90