백엔드개발/Java

[Java] 자바 스트림(Stream)

aaahyunseo 2024. 11. 1. 23:13

 

📍 스트림(Stream)이란?

: Java 8 부터 추가된 기술로 람다를 활용해 배열과 컬렉션을 함수형으로 간단하게 처리할 수 있는 기술이다.

 

🪄 스트림의 특징

  • 원본 데이터 소스를 변경하지는 않는다 - 읽기만 함
  • 일회용이다. - 한 번 사용 시 닫혀서 재사용이 불가능
  • 최종 연산 전까지 중간 연산을 수행하지 않는다.
  • 작업을 내부 반복으로 처리한다.
  • 병렬 처리가 쉽다. - 멀티쓰레드 사용
  • 기본형 스트림을 제공한다.

 

🪄 스트림 종류

  • Arrays.stream() : 배열 스트림
  • .stream() : 컬렉션 스트림 (. 앞에 컬렉션이 들어감)
  • Stream.builder()
  • IntStream : 기본 타입형 스트림
  • parallelStream() : 병렬 스트림

 

🪄 스트림 중간 연산

  • Filtering : 스트림 내 요소들을 하나씩 평가해서 걸러내는 작업. (if문 역할)
    • 람다식의 리턴값은 boolean 값이고, true인 경우에만 다음 단계를 수행한다.
    • filter()
  • Mapping : 스트림 내 요소들을 하나씩 특정 값으로 변환하는 작업.
    • 값을 변환하기 위한 람다를 인자로 받아 스트림을 원하는 모양의 새로운 스트림으로 변환하고 싶을 때 사용한다.
    • map()
  • Sorting : 스트림 내 요소들을 정렬하는 작업. (Comparator 사용)
    • sort()
  • 기타 연산
    • distinct() : 중복 제거
    • limit() : 최대 크기 제한
    • skip() : 앞에서부터 n개 skip하기

 

🪄 스트림 중간 연산

  • Calculating : 기본형 타입을 사용하는 경우 스트림 내 요소들로 최소, 최대, 합, 평균 등을 구하는 연산을 수행할 수 있다.
  • Reduction : 스트림의 요소를 하나씩 줄여가며 누적연산을 수행한다.
    • reduce(초기값, (누적변수,요소)  -> 수행문)
  • Collecting : 스트림의 요소를 원하는 자료형으로 변환한다.
    • collect()
  • Matching : 특정 조건을 만족하는 요소가 있는지 체크한 결과를 반환한다.
    • anyMatch() : 하나라도 만족하는 요소가 있는지
    • allMatch() : 모두 만족하는지
    • noneMatch() : 모두 만족하지 않는지
  • Iterating : forEach로 스트림을 돌면서 실행되는 작업이다.
    • forEach()
  • Finding : 스트림에서 하나의 요소를 반환한다.
    • findAny() : 먼저 찾은 요소 하나 반환, 병렬 스트림의 경우 첫번째 요소가 보장되지 않음
    • findFirst() : 첫번째 요소 반환

'백엔드개발 > Java' 카테고리의 다른 글

[JAVA] DFS 깊이 우선 탐색  (0) 2025.01.28
[JAVA] BFS 너비 우선 탐색  (0) 2025.01.24
[Java] 정적(Static) 멤버의 사용  (1) 2024.10.31
[Java] 일급 컬렉션  (0) 2024.10.30
[JAVA] StringBuilder  (2) 2024.10.12