컬렉션 변환·필터·집계를 선언적으로 연결합니다.
Stream은 데이터 저장소가 아니라 한 번 소비되는 처리 파이프라인입니다. filter, map은 중간 연산이고 collect, count, reduce 같은 최종 연산이 실행을 시작합니다.
첫 파이프라인은 72점 서준을 filter에서 걸러 내고 남은 두 학생을 map으로 이름만 바꿔 [민수, 지영]을 만듭니다. 합계는 Integer 흐름에서 reduce(0, Integer::sum)이 0부터 차례로 더해 255가 되고, 평균은 255를 3으로 나눈 85.0입니다. mapToInt를 쓰면 포장 없는 int 흐름이 되어 sum()을 바로 부를 수 있고, average()는 빈 경우를 위해 OptionalDouble을 돌려줍니다.
중간 연산은 lazy하며 stream은 재사용할 수 없습니다. checked exception과 상태 변경이 많은 로직은 일반 반복문이 더 명확할 수 있습니다.
대량 데이터에서 무심코 목록으로 모두 수집하지 말고 원본 데이터 접근 방식과 병목을 함께 확인합니다.
forEach의 실행 순서에 의존하거나 parallelStream에서 공유 상태를 변경하지 마세요.
직접 바꿔보세요80점 이상 이름과 평균을 구하세요.
실행 버튼을 누르면 결과가 여기에 표시됩니다.