티스토리 뷰

이 포스팅에서는 stream api가 뭔지는 적지 않고, 자주 쓰는 메서드만 정리해보겠다.

 

1. forEach()

: 컬렉션의 요소들을 하나씩 꺼내서 반복

 ex)

package main;

import java.util.Arrays;
import java.util.List;

public class Application {
    public static void main(String[] args) {

        Integer[] integerArray = new Integer[]{1, 2, 3, 4, 5};
        List<Integer> list = Arrays.asList(integerArray); // asList → 배열을 List(리스트) 형태로 바꿔줌
        list.stream().forEach(value -> System.out.println(value));

    }
}

// (결과)
// 1
// 2
// 3
// 4
// 5

이 forEach는 Stream API의 3단계 (Stream 생성 → 중간 연산 → 최종 연산) 중에서 최종 연산에 속한다. 따라서 이후에 다른 최종 메서드를 호출해서는 안된다

 

참고 ↓ [Java] - Stream API ⓛ forEach() 사용법 정리

 

[Java] - Stream API ⓛ forEach() 사용법 정리

forEach() 란?자바8에서 Stream이 도입되면서 등장한 메서드로, 리스트, 배열과 같은 컬렉션 데이터를 반복할 때 사용한다.반환 타입은 void로, 스트림의 모든 요소를 출력하는 용도로 많이 활용된다.

developer-cat.tistory.com

 

 

+)

혹시나 궁금할까봐 적는다. "List를 new 해준 부분이 없는데??"

→ "Arrays.asList()"가 이미 내부에서 new를 해주었기 때문이다.
그래서 우리가 new ArrayList<>() 안 써도 되는 거다.

++)

하지만! List는 인터페이스이고, ArrayList는 List를 구현한 클래스일뿐인데,

어떻게 List를 new 해줄 수 있나? 안되는거 아닌가? 라는 궁금증이 또또 생겼다.

→ 정확히는, "Arrays.asList()"내부에서 "List처럼 생긴 객체"를 반환한다.

여기서 말하는 List처럼 생긴 객체가 무엇인지 구체적으로는 다음에 asList()를 사용하게 되는 기회가 생긴다면,

그때 따로 포스팅하도록 하겠다.

 

2. filter()

: 컬렉션의 요소들 중, 조건문에 맞는 요소만 뽑아 새로운 스트림을 만듦  

( 참고로, 스트림 API 의 메서드들은 반복 과정이 메서드 내부에 숨어있다고 한다. )

ex)

package main;

import java.util.Arrays;
import java.util.List;

public class Application {
    public static void main(String[] args) {

        Integer[] integerArray = new Integer[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        List<Integer> list = Arrays.asList(integerArray);
        List<Integer> evenList = list.stream()
                .filter(value -> value % 2 == 0).toList();
        evenList.stream().forEach(value -> System.out.println(value));

    }
}

// (결과)
// 2
// 4
// 6
// 8
// 10

 

여기서 또 다시 toList가 뭔지 궁금증이 생긴다. 

의미를 말해보자면, "이 스트림에서 나온 데이터를 전부 모아서 새로운 리스트로 만들기"이다.

근데, 또다시 "List는 인터페이스여서 new 할 수 없는데?!?!?!?" 라는 궁금증이 생긴다.

 

이 역시 위의 asList와 마찬가지로, "List처럼 생긴 객체(List인터페이스를 구현한 클래스 중 하나임)"를 반환한다. 

검색을 해보니, ArrayList와 비슷하면서도 다르다고 하는데, 다른 포스팅에서 다룰거다.

 

3. distinct()

: 컬렉션의 요소에서 중복을 제거한다.

 

ex)

package main;


import java.util.Arrays;
import java.util.List;

public class Application {
    public static void main(String[] args) {

        Integer[] integerArray = new Integer[]{1, 1, 1, 1, 2, 2, 2, 3, 3, 4};
        List<Integer> list = Arrays.asList(integerArray);
        List<Integer> distinctList = list.stream().distinct().toList();
        distinctList.stream().forEach(value -> System.out.println(value));

    }
}


// 결과
// 1
// 2
// 3
// 4

 

4. map()

컬렉션의 요소들에 특정 연산을 적용한 새로운 스트림을 만듦.

쉽게 말해서, 기존의 컬렉션을 변형한 새로운 스트림을 만드는 것이다.

 

ex)

package main;

import java.util.Arrays;
import java.util.List;

public class Application {
    public static void main(String[] args) {

        String[] lowercaseArray = new String[]{"public", "static", "void"};
        List<String> lowercase = Arrays.asList(lowercaseArray);
        List<String> uppercaseList = lowercase.stream()
                .map(value -> value.toUpperCase()).toList();
        uppercaseList.stream().forEach(value -> System.out.println(value));
        
    }
}

// (결과)
// PUBLIC
// STATIC
// VOID

 

collect(), toList() 

스트림을 리스트로!

 

filter(), distinct(), map()과 함께," .collect(Collectors.toList()) " 를 이용하여 스트림을 리스트로 만들 수 있다.

하지만, 자바 16버전부터는 .collect(Collectors.toList()) 대신, "toList()"만을 이용하여 간결하게 작성할 수 있다.

 

 

---------------------------------

스트림은 메서드가 엄청 많은 걸로 알고있다. 

현재 보고있는 "이것이 취업을 위한 백엔드 개발이다"책을 학습한 후, 실전으로 개인 스프링부트 프로젝트를 하며 만나게될 다른 메서드들은 그때가서 정리할 생각이다.

 

오늘은 여기까지....

 

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2026/04   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
글 보관함