개발지식 먹는 하마 님의 블로그

Java - 람다(Lambda) & 스트림(Stream) 본문

Java

Java - 람다(Lambda) & 스트림(Stream)

devhippo 2025. 2. 25. 16:17

람다 Lambda

익명 클래스를 더 간결하게 표현하는 문법
코드를 더 짧고 가독성 높게 작성할 수 있다.

( 매개변수 ) -> { 실행 코드 }

함수형 인터페이스 (추상 메서드가 하나만 존재하는 인터페이스) 에서만 사용할 수 있다.

< 실제 사용 예시 >

@FunctionalInterface
interface MyFunction {
    int calculate(int x, int y);
}

// 람다 표현식 사용
MyFunction add = (a, b) -> a + b;
MyFunction multiply = (a, b) -> a * b;

System.out.println(add.calculate(5, 3));   // 출력: 8
System.out.println(multiply.calculate(5, 3)); // 출력: 15

스트림(stream)

데이터를 효율적으로 처리하는 흐름
데이터 처리를 위해 여러 API를 제공한다.

선언형 스타일로 가독성이 높다.

컬렉션 또는 배열을 함수형 프로그래밍 방식으로 처리할 수 있도록 한다.
반복문 없이 데이터를 간결하게 집계, 변환, 필터링 가능

  • 원본 데이터를 변경하지 않고, 새로운 데이터를 생성한다.
  • for, while 대신 내부적으로 반복을 처리한다.
  • 함수형 스타일 (map, filter, reduce 등)의 연산(API)를 제공한다.
  • 지연 연산 (Laze Evaluation) 최종 연산이 호출 전까지 중간 연산이 실행되지 않음
  • parallelStream을 사용한 병렬 처리 가능 (with 멀티코어 CPU)

< 스트림 구조 >

컬렉션.stream()
    .중간 연산1()
    .중간 연산2()
    ...
    .최종 연산();

 

< 스트림 제공 API >

단계 설명 주요 API
데이터 준비 컬렉션을 스트림으로 변환 stream(), parallelStream()
데이터 가공 데이터 변환 및 필터링 map(), filter(), sorted()
결과 만들기 최종처리 및 데이터 변환 collect(), forEach(), count()

 

- 실제 예시 - 

public class StreamSortedExample {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(5, 3, 8, 1, 2);

        List<Integer> sortedNumbers = numbers.stream()
                .sorted()  // 오름차순 정렬
                .collect(Collectors.toList());

        System.out.println(sortedNumbers);  // 출력: [1, 2, 3, 5, 8]
    }
}

 

https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html

 

Stream (Java Platform SE 8 )

A sequence of elements supporting sequential and parallel aggregate operations. The following example illustrates an aggregate operation using Stream and IntStream: int sum = widgets.stream() .filter(w -> w.getColor() == RED) .mapToInt(w -> w.getWeight())

docs.oracle.com

 

'Java' 카테고리의 다른 글

Java - Pattern & Matcher  (0) 2025.02.28
Java - GUI JFrame  (0) 2025.02.25
Java - 제네릭 (Generic)  (0) 2025.02.25
JAVA의 구조  (0) 2025.02.24
Java - 네트워크 프로그래밍  (0) 2025.02.09