본문 바로가기

JAVA

Java Stream이란?

728x90

stream은 흐름이라는 뜻인데,

데이터의 흐름에서 원하는 값을 가공하여 최종적으로 원하는 값을 제공

 

예를 들어

stream이라는 데이터에서

stream.filter()로 특정 기준으로 자르고

.map()으로 우리가 하고 싶은 처리를 해주고

.collect()로 최종 값을 준다.

 

Stream을 사용하는 이유

  • 기존의 반복문과 조건문을 사용하는 코드를 간단하게 대체할 수 있음
  • 특히 기존 list나 map 같은 경우 반복문이 들어가야 했지만 stream으로 이를 대체할 수 있음 iterator도 안써도 됨
  • 병렬 처리를 지원하여 성능 향상에 도움이 됨

예제 코드

stream을 사용하지 않고 for문을 사용하는 경우

public class Stream {
    public static void main(String[] args) {
        // 1. products 선언
        List<Product> productList = List.of(
                productFactory(1, "A", 1000),
                productFactory(2, "A", 1500),
                productFactory(3, "A", 300),
                productFactory(4, "B", 3000),
                productFactory(5, "C", 2000)
        );

        // 2. A제품만 선택하기 (필터링)
        List<Product> aProduct = new ArrayList<>();
        for (Product p : productList) {
            if (p.getName().equals("A")) {
                aProduct.add(p);
            }
        }

        // 3. 가격 순 정렬
        aProduct.sort(Comparator.comparing(Product::getPrice));

        // 4. 아이디 출력
        List<Integer> aProductId = new ArrayList<>();
        for(Product p : aProduct) {
            aProductId.add(p.getId());
        }

    }

아이디만 출력하면 최종적으로

2,1,3 이 나올 것이다.

stream을 사용한 경우

public class Stream {
    public static void main(String[] args) {
        // 1. products 선언
        List<Product> productList = List.of(
                productFactory(1, "A", 1000),
                productFactory(2, "A", 1500),
                productFactory(3, "A", 300),
                productFactory(4, "B", 3000),
                productFactory(5, "C", 2000)
        );
        
        // 2. Stream 적용해보기
        List<Integer> aProductId = productList.stream()
                .filter(product -> product.getName().equals("A")) // 필터링
                .sorted(Comparator.comparing(Product::getPrice)) // 정렬
                .map(Product::getId).collect(Collectors.toList()); // 아이디 값 출력
    }

출력 결과는 똑같지만 훨씬 코드가 간결

728x90

'JAVA' 카테고리의 다른 글

spring mvc와 webflux의 차이점  (2) 2024.04.03
직렬화 (Serialization) 란?  (0) 2024.03.20
JPA(JAVA Persistence API) 란?  (0) 2024.03.18
Sequence 생성을 위한 Operator  (0) 2024.03.17
DTO, DAO란???  (0) 2024.03.04