티스토리 뷰

728x90

기본형 특화 스트림인 IntStream과 LongStream에는 정적 메서드인 range와 rangeClosed가 있다.

특정 범위의 숫자를 차례대로 생성해주는 기능을 가진다.

두 메서드 모두 시작 값과 종료 값을 인수로 받는다.

public static IntStream range(int startInclusive, int endExclusive) {
    ...
}

public static IntStream rangeClosed(int startInclusive, int endInclusive) {
    ...
}

단 하나의 차이점이라면

함수의 인자값에도 힌트가 있듯이 range 메서드는 종료 값을 포함하지 않지만 (endExclusive)

rangeClosed 메서드는 종료값을 포함해서 반환한다. (endInclusive)

예제 및 결과

public class IntStreamSample {
    public static void main(String[] args) {

        System.out.println("range");
        IntStream.range(0, 5)
                .forEach(System.out::println);

        System.out.println("=========");

        System.out.println("rangeClosed");
        IntStream.rangeClosed(0, 5)
                .forEach(System.out::println);

        //짝수의 개수 구하기
        long evenCount = IntStream.range(0, 100)
                .filter(i -> i % 2 == 0)
                .count();
        System.out.println("짝수 개수 = " + evenCount);
    }
}


//결과
range
0
1
2
3
4
=========
rangeClosed
0
1
2
3
4
5
짝수 개수 = 50

결과에서 보다시피 range는 끝 값을 포함하지 않고 rangeClosed는 끝 값을 포함한다.
마지막에 짝수만 필터링 하는 IntStream 예제인데 range메서드를 사용해서 50개가 나오는데 rangeClosed를 사용하면 51개가 나온다.
100을 포함하기 때문이다.

728x90
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함