코딩헤딩

Java Stream 정리 + 활용법 본문

뻘짓

Java Stream 정리 + 활용법

멈머이 2025. 8. 13. 23:39
728x90

* Java 8부터 도입된 Stream API의 활용법

 

1. Stream이란?

Java Stream은 컬렉션(리스트, 셋 등)의 요소를 함수형 스타일로 처리할 수 있게 해주는 API.
루프(for, while)를 대체하여 가독성이 높고, 병렬처리도 쉽게 지원함.

 

2. Stream의 기본 사용법

List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");

// 1) 스트림 생성
Stream<String> stream = names.stream();

// 2) 중간 연산: 필터링
Stream<String> filtered = stream.filter(name -> name.startsWith("A"));

// 3) 최종 연산: 출력
filtered.forEach(System.out::println);

 

 

3. 주요 중간 연산 (Intermediate Operations)

  • filter(Predicate<T>) : 조건에 맞는 요소만 필터링
  • map(Function<T, R>) : 요소를 다른 형태로 변환
  • sorted() : 정렬
  • distinct() : 중복 제거
  • limit(n) : 앞의 n개만 추출

 

4. 주요 최종 연산 (Terminal Operations)

  • forEach(Consumer<T>) : 요소 소비
  • collect(Collector) : 결과를 컬렉션 등으로 변환
  • reduce(BinaryOperator) : 요소를 하나로 합침
  • count() : 요소 개수 반환
  • anyMatch(Predicate), allMatch(Predicate) : 조건 만족 여부 확인

 

5. 예제

 # 직원 리스트에서 연봉 5,000 이상인 사람 이름만 뽑기

class Employee {
    String name;
    int salary;
    // 생성자, getter 생략
}

List<Employee> employees = List.of(
    new Employee("홍길동", 6000),
    new Employee("김철수", 4500),
    new Employee("이영희", 5200)
);

List<String> highEarners = employees.stream()
    .filter(emp -> emp.getSalary() >= 5000)
    .map(Employee::getName)
    .collect(Collectors.toList());

System.out.println(highEarners); // [홍길동, 이영희]

 

 

6. 병렬 스트림 (Parallel Stream)

병렬 처리를 통해 성능 향상 가능/단, 상태 공유나 순서 의존 코드 주의

employees.parallelStream()
    .filter(emp -> emp.getSalary() >= 5000)
    .map(Employee::getName)
    .forEach(System.out::println);

 

 


 

  • Stream은 코드 간결, 가독성 향상에 탁월
  • 적절히 병렬 스트림을 활용해 성능 개선 가능
  • 너무 복잡한 스트림 체인은 오히려 가독성을 해칠 수 있으니 적절한 분리 필요

 

728x90