JAVA/Stream

Java 8 Stream이란?

devNam 2021. 9. 4. 19:06
반응형

이 카테고리를 따로 생성하게 된 이유는 Stream에서 사용되는 메서드들을 다루기 위함이다

1. Stream 이란?

- 컬렉션(배열 포함)의 저장 요소를 하나씩 참조해서 람다식으로 처리할 수 있도록 해주는 반복자이다

 

2. Stream의 특징?

  2.1 람다식으로 요소처리 코드를 제공한다

  2.2 내부 반복자를 사용하므로 병렬 처리가 쉽다

    - 내부 반복자 : 컬렉션 내부에서 요소들을 반복시키고, 개발자는 요소당 처리해야할 코드만 제공하는 코드 패턴

        -> 개발자는 요소 처리 코드에만 집중 할 수 있다는 장점이 있다

        -> 컬렉션의 parallelStream() API를 사용하면 요소들을 분배시켜 병렬 작업이 가능하다

    - 외부 반복자 : 개발자가 코드로 직접 컬렉션의 요소를 반복해서 처리하는 코드 패턴

       ex) for, while문을 이용한 처리

import java.util.Arrays;
import java.util.List;

public class Main {

    public static void main(String[] args) {
        List<String> names = Arrays.asList("kim","nam","lee");
        // 외부 반복자
        for(String name: names) {
            System.out.println(name);
        }

        // 내부 반복자
        names.stream().forEach(name -> System.out.println(name));
        names.stream().forEach(System.out::println);
    }
}

 

  2.3 Stream은 중간 처리와 최종 처리를 할 수 있다

    - Stream API인 filter(), map(), sorted() 등이 중간 처리이고, forEach(),count(),max(),average() 등의 집계처리는 최종 처리이다.

import java.util.Arrays;
import java.util.List;

public class Main {

    public static void main(String[] args) {
        List<String> names = Arrays.asList("kim","nam","lee");
        // 중간 처리 - sorted, 최종처리 - forEach
        names.stream().sorted().forEach(name -> System.out.println(name));
        // 중간 처리 - map, 최종처리 - forEach
        names.stream().map(n -> n+"!").forEach(System.out::println);
    }
}

 

개인적 Stream 사용 후기

  • Stream은 잘 사용한다면 코드를 깔끔하고 직관성 있고 효율성있게 작성할 수 있다.
  • 다만 Stream에 너무 집착하면 안 된다.
  • for, while문을 이용해 stream을 사용했을 때보다 더 효율적이고 직관적인 코드를 작성할 수도 있다.
반응형

'JAVA > Stream' 카테고리의 다른 글

Java 8 stream - forEach()  (0) 2021.09.08