[Java] 스트림 API

hyeminn·2021년 1월 29일
0

스트림(Streams)

자바 8에서 추가한 스트림(Streams)은 람다를 활용할 수 있는 기술 중 하나이다. 자바 8 이전에는 배열 또는 컬렉션의 인스턴스를 다루는 방법은 for 또는 foreach문을 돌면서 요소 하나씩 꺼내 다루는 방법이였다. 스트림은 데이터를 추상화해서 다루기 때문에, 다양한 형태로 저장된 데이터를 위한 공통된 방법을 제공한다.

스트림은 데이터의 흐름이다. 배열 또는 컬렉션 인스턴스에 함수 여러 개를 조합해서 원하는 결과를 필터링하고 가공된 결과를 얻을 수 있다. 또한 람다를 이용해서 코드의 양을 줄이고 간결하게 표현할 수 있다. 또 하나의 장점은 병렬처리가 가능하다. 즉, 쓰레드를 이용해 많은 요소들을 빠르게 처리할 수 있다.

  • 스트림 동작
    1. 스트림 생성
    2. 스트림 중개 연산
      • filter map peek sorted limit distinct skip
    3. 스트림 최종 연산
      • count min max sum average reduce forEach collect iterator
    
// 정수형 배열에서 스트림 생성
Integer[] arr1 = new Integer[] {1, 5, 11, 13, 20, 52};
Stream stream1 = Arrays.stream(arr1);
stream1.map(i -> i * 2);
stream1.filter(i -> i % 2 == 0);			// 재사용이 불가능하기 때문에 에러 발생!
 
 
// 정수형 배열에서 스트림 생성
Integer[] arr2 = new Integer[] {1, 5, 11, 13, 20, 52};
Stream stream2;
stream2 = Arrays.stream(arr2)
                .filter(i -> i % 2 != 0)	// {1, 5, 11, 13}
                .map(i -> i * 2);			// {2, 10, 22, 26}

스트림 특징

  • 스트림은 내부 반복을 통해 작업을 수행함
  • 스트림은 단 한번만 사용할 수 있음. 재사용 불가함
  • 원본 데이터를 변경하지 않음
  • 스트림의 연산은 필터-맵 기반의 API를 사용하여 lazy 연산을 통해 성능을 최적화함
  • 스트림은 parallelStream() 메소드를 통해 간단한 병렬처리를 지원함

https://futurecreator.github.io/2018/08/26/java-8-streams/
https://jeong-pro.tistory.com/165

profile
성장하는 개발자가 되고 싶어요 😁

0개의 댓글