기본형 특화 스트림

sungs·2025년 9월 2일

자바

목록 보기
88/95

기본형 특화 스트림

int, double 등 기본 자료형에 특화된 스트림이다. 이를 사용하면 유의미한 성능 차이가 있는 건 아니지만, 그래도 성능과 가시성에 있어서 장점을 보인다. 숫자 연산일 경우 사용하면 좋다.

스트림의 종류로는 IntStream, LongStream, DoubleStream이 있다.

주요 메서드

range(), rangeClosed()

둘 다 범위를 정하는 메서드로, 범위를 정해주는 두 수를 매개변수로 받는다. 다만, 범의 끝을 알려주는 두 번째 매개변수를 rangeClosed()는 포함하지만, range()는 포함하지 않는다는 차이가 있다. 그러니까 1과 5를 인자로 넣었을 때 range는 1~4만 반환하지만, rangeClosed는 1~5를 반환한다.

  int sum1 = IntStream.rangeClosed(1, 10)

sum()

요소들의 합계를 반환한다.

int sum2 = IntStream.of(10, 20, 30, 40, 50).sum();

System.out.println("지정한 숫자들의 합: " + sum2);

average()

요소들의 평균을 반환한다. 결과 없을 수 있으므로 Optional을 반환한다.

IntStream stream = IntStream.rangeClosed(1, 10);

        // average() 메서드는 OptionalDouble을 반환
        OptionalDouble optionalDouble = stream.average();

        // OptionalDouble에 값이 있는지 확인하고 출력
        if (optionalDouble.isPresent()) {
            double average = optionalDouble.getAsDouble();
            System.out.println("1부터 10까지의 평균: " + average); // 출력: 5.5
        } else {
            System.out.println("평균을 계산할 수 없습니다.");
        }

summaryStatics()

앞에 기본형을 붙여서 총합, 평균, 최댓값, 최솟값 등 모든 통계 정보를 반환한다.

 IntStream numbers = IntStream.of(10, 20, 30, 40, 50);

        // summaryStatistics()를 호출하여 통계 객체를 얻음
        IntSummaryStatistics stats = numbers.summaryStatistics();

        // 결과 출력
        System.out.println("전체 통계 객체: " + stats);
        System.out.println("-------------------------");
        System.out.println("개수 (count): " + stats.getCount());
        System.out.println("합계 (sum): " + stats.getSum());
        System.out.println("최소값 (min): " + stats.getMin());
        System.out.println("최대값 (max): " + stats.getMax());
        System.out.println("평균 (average): " + stats.getAverage());

maptoLong(), mapToDouble()...

mapTo... 뒤에 기본형 타입을 붙여 그 타입으로 변환시킨다.

 LongStream ls = IntStream.of(1,2).mapToLong(i  i * 10L);

mapToObj()

객체 스트림으로 변환시킨다. 기본형에서 참조형으로 바뀌는 거다. 아래 같은 경우는 IntSream이 String으로 Obj를 거쳐 String으로 스트림에 담기는 것이다.

Stream<String> s = IntStream.range(1,5).mapToObj(i "No: "+i);

boxed()

기본형 특화 스트림을 박싱된 객체 스트림으로 변환한다. 반대로 객체 스트림에서 기본형 특화 스트림으로 변환시키려면 mapToXxx을 사용하면 된다.

Stream<Integer> si = IntStream.range(1,5).boxed();

Stream<Integer> integerStream = Stream.of(1, 2, 3, 4, 5);
IntStream intStream = integerStream.mapToInt(i -> i);

min(), max(), count()

각각 요소들의 최솟값, 최댓값, 갯수를 반환한다.

asXxxStream()

as 뒤에 기본형 타입이 붙어 그 기본형 타입 특화 스트림으로 변환시킨다.

LongStream longStream = IntStream.range(1, 5).asLongStream();
profile
앱 개발 공부 중

0개의 댓글