Java

[Java8] Stream

나프초 2024. 7. 28. 20:48

Stream이란?

  • 연속된 데이터를 처리하는 오퍼레이션들의 모음
  • Stream 자체가 데이터는 아니다. 데이터를 담는 저장소도 아니다.
  • 스트림이 처리하는 소스 데이터를 변경하지 않는다 => functional 하다고 표헌
  • 스트림으로  처리하는 데이터는 오직 한 번만 처리한다.
  • 데이터 양이 무제한일 수 있다. (실시간으로 계속 들어오는 데이터를 스트림으로 받아 처리할 수 있다.)
    • Short Circuit 메소드를 활용하면 무제한의 데이터 중 특정 조건에 맞는 데이터만 골라 사용할 수 있다. (ex-선착순 10개의 데이터만 사용)
  • 중개 오퍼레이션(중단되지 않고 계속해서 이어지는 형태)들은 근본적으로 lazy하다.
    • 터미널 오퍼레이션 만날때까지 실행되지 않는다.
  • 병렬 처리를 손쉽게 할 수 있다.
    • Parallel Stream을 받아서 처리하면 JVM이 알아서 병렬 처리를 해준다.
    • 병렬 처리한다고 무조건 빨라지는게 아니기 때문에 데이터가 방대하게 많은 경우가 아니면 일반적인 stream을 사용해도 좋다.

 

Stream Pipeline

  • 0 ~ n개의 중개 오퍼레이션 + 1개의 종료 오퍼레이션 으로 구성 (종료 오퍼레이션은 반드시 1 개가 있어야 함!)
  • 스트림의 데이터 소스는 오직 터미널 오퍼네이션을 실행할 때에만 처리한다.
public static void main(String [] args) {
	
    List<String> names = new ArrayList<>();
    name.add("Amy");
    name.add("Bob");
    name.add("Chris");
    name.add("Doby");
    
    List<String> collect = names.stream().map((s) -> {
    	return s.toUpperCase();
    }).collect(Collectors.toList());
    
    collect.forEach(System.out::println);
    
    System.out.println("-----");
    
    names.forEach(System.out::priintln);
}

/* 출력 결과
AMY
BOB
CHRIS
DOBY
-----
Amy				//기존 데이터는 변경되지 않음
Bob
Chris
Doby
*/

 

Stream API

중개 오퍼레이션

  • 계속해서 이어지는 중개형 오퍼레이터
  • Stream을 리턴한다.
  • filter, map, limit, skip, sorted, ...

종료 오퍼레이션(터미널 오퍼레이션)

  • 종료시키는 오퍼레이션
  • Stream이 아닌 다른 형태를 리턴한다.
  • collect, allMatfh, count, forEach, min, max, ...

이 포스팅은 더 자바, Java 8 강의를 수강하며 작성되었습니다.

 

더 자바, Java 8 강의 | 백기선 - 인프런

백기선 | 자바 8에 추가된 기능들은 자바가 제공하는 API는 물론이고 스프링 같은 제 3의 라이브러리 및 프레임워크에서도 널리 사용되고 있습니다. 이 시대의 자바 개발자라면 반드시 알아야 합

www.inflearn.com