[Java] 스트림(stream)

쓰옹·2022년 12월 1일
0

📙 Java 잡아🤏

목록 보기
18/25
post-thumbnail

스트림

  • 배열이나 컬렉션에 담긴 데이터를 다룰 때, 반복문이나, iterator를 사용하면 코드가 길어지고, 가독성이 떨어진다. 이 문제를 해결하기위해 Stream API 등장.
  • 여러 자료의 처리에 대한 기능을 구현해 놓은 클래스
  • 배열, 컬렉션 등의 자료를 일관성 있게 처리 가능
  • 처리해야 하는 자료가 무엇인지 상관없이 같은 방식으로 메서드 호출
    int[] arr = {1, 2, 3, 4, 5};
    for(int i = 0; i < arr.length; i++) {
    	System.out.println(arr[i]);
    }
    
    //스트림 생성
    int[] arr = {1, 2, 3, 4, 5};
    Arrays.stream(arr).forEach(n -> System.out,println(n));
    -----------------  -----------------------------------
    //스트림 생성 부분     요소를 하나씩 꺼내어 출력하는 기능

스트림 연산

  • 스트림 파이프라인
    • 0 ~ N 개의 중개 연산과 1개의 종료 연산으로 구성.
  • 중간 연산
    • 자료를 거르거나 변경하여 또 다른 자료를 내부적으로 생성
    • 필터링 : filter , distinct
    • 변환 : map , flatMap
    • 제한 : limit , skip
    • 정렬 : sorted
  • 최종 연산
    • 생성된 내부 자료를 소모해 가며 연산 수행
    • 마지막 한 번만 호출
    • 최종 연산이 있어야 중간 연산의 결과가 만들어짐
    • 결과를 만드는 데 주로 사용
    • 요소 출력 : forEach; 요소를 하나씩 꺼내
    • 요소 검색 : findFirst, findAny
    • 요소 통계 : count, min, max
    • 요소 연산 : sum, average
    • 요소 수집 : collect

특징 정리

  • 스트림은 데이터를 변경하지 않음
  • 대상과 관계 없이 동일한 연산 수행
  • 스트림은 재사용이 불가 → 최종 연산이 실행된 후 재사용 불가.
    • 다른 기능을 호출하려면 스트림 새로 생성해야함
  • 기존자료를 변경하지 않음
    • 스트림 연산을 위해 사용하는 메모리 공간이 별도로 존재
  • 지연연산(lazy evaluation)
    • 중간 연산이 호출되어도 최종 연산이 호출되지 않으면 정렬이나 검색을 가져올 수 없음
profile
기록하자기록해!

0개의 댓글