[JAVA] Stream 개념 및 주요 메서드

Wook·2025년 2월 9일
0

TIL | 취업 후

목록 보기
7/9

위 표에서 Java Stream API의 주요 메서드와 시간복잡도를 확인할 수 있습니다.
다음으로 Stream의 개념과 각 메서드의 사용법을 설명드릴게요! 🚀


🔹 Java Stream 개념 및 주요 메서드

✅ Stream이란?

  • Java 8에서 도입된 함수형 프로그래밍 API
  • 리스트(List), 배열(Array) 등의 데이터를 변환하고 처리하는 데 사용
  • 컬렉션을 반복문 없이 효율적으로 가공 가능

✅ 1. Stream 생성 (stream())

📌 리스트 → 스트림 변환

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Stream<Integer> stream = list.stream();

stream()을 사용하면 리스트를 스트림으로 변환 가능
✔ 이후 .map(), .filter(), .sorted() 등의 메서드를 적용할 수 있음


✅ 2. 요소 변환 (map(), mapToInt())

📌 map() → 요소 변환

List<String> words = Arrays.asList("apple", "banana", "cherry");

List<Integer> lengths = words.stream()
                             .map(String::length)  // 각 문자열 길이 변환
                             .collect(Collectors.toList());

System.out.println(lengths);  // [5, 6, 6]

map(Function<T, R>)요소를 변환하여 새로운 스트림 생성

📌 mapToInt()Integerint 변환

List<Integer> list = Arrays.asList(10, 20, 30);

int[] array = list.stream().mapToInt(i -> i).toArray();

System.out.println(Arrays.toString(array));  // [10, 20, 30]

mapToInt(i -> i)Integerint로 변환하는 역할
마지막에 toArray()를 사용하여 int[] 배열로 변환 가능


✅ 3. 요소 필터링 (filter())

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);

List<Integer> evens = numbers.stream()
                             .filter(n -> n % 2 == 0)  // 짝수만 남김
                             .collect(Collectors.toList());

System.out.println(evens);  // [2, 4, 6]

filter(Predicate<T>)조건에 맞는 요소만 남기기


✅ 4. 정렬 (sorted())

List<Integer> numbers = Arrays.asList(5, 3, 8, 1);

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

System.out.println(sortedList);  // [1, 3, 5, 8]

sorted()오름차순 정렬 (기본값)

📌 내림차순 정렬

List<Integer> sortedDesc = numbers.stream()
                                  .sorted(Comparator.reverseOrder()) // 내림차순 정렬
                                  .collect(Collectors.toList());

System.out.println(sortedDesc);  // [8, 5, 3, 1]

내림차순 정렬은 Comparator.reverseOrder() 사용


✅ 5. 중복 제거 (distinct())

List<Integer> numbers = Arrays.asList(1, 2, 2, 3, 3, 3, 4);

List<Integer> uniqueNumbers = numbers.stream()
                                     .distinct()
                                     .collect(Collectors.toList());

System.out.println(uniqueNumbers);  // [1, 2, 3, 4]

distinct()중복된 요소 제거 후 새로운 리스트 생성


✅ 6. 요소 개수 반환 (count())

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

long count = numbers.stream().count();

System.out.println(count);  // 5

count()스트림 내 요소 개수 반환


✅ 7. 스트림을 리스트/배열로 변환

📌 collect() → 리스트로 변환

List<Integer> list = numbers.stream().collect(Collectors.toList());

collect(Collectors.toList())는 스트림을 리스트로 변환

📌 toArray() → 배열로 변환

int[] arr = numbers.stream().mapToInt(i -> i).toArray();
System.out.println(Arrays.toString(arr));  // [1, 2, 3, 4, 5]

mapToInt()로 변환 후 toArray()를 사용하면 int[] 반환


✅ 최종 정리

메서드설명시간복잡도
stream()리스트/배열을 스트림으로 변환O(1)
map(Function<T, R>)요소를 변환하여 새로운 스트림 생성O(N)
mapToInt(ToIntFunction<T>)요소를 int 값으로 변환O(N)
filter(Predicate<T>)조건에 맞는 요소만 필터링O(N)
sorted()오름차순 정렬O(N log N)
forEach(Consumer<T>)각 요소에 대해 작업 수행O(N)
collect(Collectors.toList())스트림을 리스트로 변환O(N)
count()요소 개수 반환O(N)
distinct()중복 제거O(N)
toArray()스트림을 배열로 변환O(N)

🚀 결론

Stream을 사용하면 반복문 없이 리스트/배열을 변환 & 필터링 가능!
mapToInt(i -> i).toArray()Integer 리스트를 int[]로 변환하는 가장 쉬운 방법!
중복 제거 → distinct(), 정렬 → sorted(), 필터링 → filter() 활용!

profile
지속적으로 성장하고 발전하는 진취적인 태도를 가진 개발자의 삶을 추구합니다.

0개의 댓글

관련 채용 정보