Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java 스트림 Collectors toCollection() 메서드 완벽 가이드

Java Collectors.toCollection() 메서드란?

Java의 Collectors 클래스에서 제공하는 toCollection() 메서드는 입력 요소들을 만난 순서(encounter order)대로 새로운 Collection에 누적하는 Collector를 반환합니다. 개발자가 원하는 컬렉션 타입을 직접 지정할 수 있어 유연성이 뛰어나다는 것이 가장 큰 장점입니다.

문법(Syntax)

static <T,C extends Collection<T>>
Collector<T,?,C> toCollection(Supplier<C> collectionFactory)

매개변수 설명

  • T : 입력 요소의 타입
  • C : 결과로 생성될 Collection의 타입
  • Supplier : 결과를 공급하는 함수형 인터페이스
  • collectionFactory : 적절한 타입의 비어 있는 새 Collection을 반환하는 Supplier

예제 1 : TreeSet으로 수집하기

다음 예제에서는 문자열 스트림을 TreeSet으로 수집합니다. TreeSet은 요소를 자동으로 정렬하고 중복을 제거하는 특징이 있습니다.

import java.util.Collection;
import java.util.TreeSet;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Demo {
   public static void main(String[] args) {
      Stream<String> stream = Stream.of("25", "10", "15", "20", "25");
      Collection<String> collection = stream.collect(Collectors.toCollection(TreeSet::new));
      System.out.println("Collection = " + collection);
   }
}

실행 결과

Collection = [10, 15, 20, 25]

출력 결과를 보면 중복된 값 "25"가 제거되고, 숫자 크기순으로 정렬되어 출력된 것을 확인할 수 있습니다.

예제 2 : 이름 목록 정렬하기

이번에는 여러 개의 이름 문자열을 TreeSet으로 수집하는 예제입니다.

import java.util.Collection;
import java.util.TreeSet;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Demo {
   public static void main(String[] args) {
      Stream<String> stream = Stream.of("Jack", "Tom", "Brad", "Tim", "Kevin", "Bradley", "Ryan");
      Collection<String> collection = stream.collect(Collectors.toCollection(TreeSet::new));
      System.out.println("Collection = " + collection);
   }
}

실행 결과

Collection = [Brad, Bradley, Jack, Kevin, Ryan, Tim, Tom]

모든 이름이 알파벳 순서로 자동 정렬되어 출력되는 것을 볼 수 있습니다.

정리

Collectors.toCollection()은 스트림의 요소를 ArrayList, LinkedList, TreeSet 등 원하는 컬렉션 구현체로 자유롭게 수집할 수 있는 강력한 메서드입니다. 특히 특정 컬렉션 타입이 필요하거나 정렬, 중복 제거와 같은 부가 기능이 필요할 때 매우 유용하게 활용할 수 있습니다.