[JAVA] streamApI로 숫자 합산하기

    [JAVA] streamApI로 숫자 합산하기

     

    기본형 특화 스트림

    • int 요소 : IntStream
    • double 요소 : DoubleStream
    • long 요소 : LongStream

     

    숫자 스트림의 합계를 계산하는 SUM, 최댓값 요소를 검색하는 MAX

    각각 인터페이스는  리듀싱 연산 수행 메서드와 다시 객체 스트림으로 복원하는 기능도 제공한다.

    int calories = menu.stream()
                      .map(Dish::getCalories)
                      .reduce(0, Integer::sum);

     

    숫자 스트림으로 매핑

    • mapToInt, mapToDouble, mapToLong 3가지 메서드를 가장 많이 사용
    • mapToInt 메서드는 Dish에서모든 Calories를 가져와 IntStream으로 반환하며 sum 메서드를 이용해 합계를 구할 수 있다.
    • 값이 비었을 경우 0을 반환한다.
    int calories = menu.stream()
                      .mapToInt(Dish::getCalories)
                      .sum();

     

    기본값 OptionalInt

    • OptionalInt의 경우 0이라는 기본값이 없기 때문에
    • 스트림에 요소가 없을때와 실제로 최댓값이 0상황을 구별해야한다.
    OptionalInt maxCalories = menu.stream()
                                  .mapToInt(Dish::getCalories)
                                  .max();
                                  
    int max = maxCalories.orElse(1);

     

    객체 스트림으로 복원

    • 객체 스트림으로 복원숫자 스트림을 만든 다음에 원상태인 특화되지 않은 스트림으로 복원
    IntStream intStream = menu.stream().mapToInt(Dish::getCalories);
    Stream<Integer> stream = intStream.boxed();

     

    댓글

    Designed by JB FACTORY