[JAVA] Stream 총정리

[JAVA] Stream 총정리

Streams

  • 자바 8이전에는 배열 또는 컬렉션 인스턴스를 다루는 방법은 for 또는 foreach 문을 돌면서 요소 하나씩을 꺼내서 다루는 방법이었음
  • 간단한 경우라면  상관없지만, 로직이 복잡해질수록 코드의 양이 복잡해져서 여러 로직이 섞이게 됨
  • Stream은 '데이터의 흐름'
    • 배열 또는 컬렉션 인스턴스에 함수 여러 개를 조합해서 원하는 결과를 필터랑 하고 가공된 결과를 얻을 수 있음
    • 람다를 이용해서 코드의 양을 줄이고 간결하게 표현 가능
    • 즉, 배열과 컬렉션을 함수형으로 처리 가능
  • 또 하나의 장점은 간단하게 병렬처리가 가능
    • 병렬처리 : 하나의 작업을 둘 이상의 작업으로 잘게 나눠서 동시에 진행하는 것
    • 즉, 쓰레드를 이용해 많은 요소들을 빠르게 처리

Streams의 순서

  1. 생성하기 : 스트림 인스턴스 생성
  2. 가공하기 : 필터링(filtering) 및 맵핑(mapping)등 원하는 결과를 만들어가는 중간 작업
  3. 결과 만들기 : 최종적으로 결과를 만들어내는 작업

Streams 생성하기

  • 보통 배열과 컬렉션을 이용해서 스트림을 만들지만 이 외에도 다양한 방법으로 스트림을 만들 수 있음
  • 스트림을 이용하기 위해서는 먼저 생성을 해야 함. 


    배열 Stream

    • 배열은 다음과 같이  Arrays.stream 메소드를 사용

    String[] arr = new String[]{"a", "b", "c"};
    Stream stream = Arrays.stream(arr);
    Stream streamOfArrayPart = 
    Arrays.stream(arr, 1, 3); // 1~2 요소 [b, c]


    컬렉션 Stream

    • 컬렌션 타입(Collection, List, Set)의 경우 인터페이스에 추가된 디폴트 메소드 stream 을 이용해서 스트림을 만들 수 있음
    List list = Arrays.asList("a", "b", "c");
    Stream stream = list.stream();
    Stream parallelStream = list.parallelStream(); // 병렬 처리 스트림



    댓글

    이 블로그의 인기 게시물

    [Python] # -*- coding: utf-8 -*-를 쓰는 이유

    [소프트웨어공학] NS(Nassi-Schneiderman) 차트

    [컴퓨터네트워크] Telnet이란?