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

Java에서 Iterator를 List로 변환하는 방법

Java에서 Iterator는 컬렉션의 요소를 순차적으로 탐색할 수 있게 해주는 인터페이스입니다. 실무에서는 Iterator로 데이터를 받은 후, 인덱스 기반 접근이나 다양한 List 연산을 활용하기 위해 이를 List 형태로 변환해야 하는 경우가 자주 발생합니다.

forEachRemaining() 메서드 활용하기

가장 간단하고 권장되는 방법은 Java 8부터 제공되는 forEachRemaining() 메서드를 사용하는 것입니다. 이 메서드는 Iterator에 남아 있는 모든 요소에 대해 지정된 동작을 한 번에 수행합니다.

먼저 다음과 같이 Integer 값으로 구성된 Iterator가 있다고 가정해 보겠습니다.

Iterator<Integer> iterator = Arrays.asList(50, 100, 200, 300, 400, 500, 1000).iterator();

이제 이 Iterator를 List로 변환합니다. 메서드 참조(myList::add)를 활용하면 코드가 더욱 간결해집니다.

List<Integer> myList = new ArrayList<>();
iterator.forEachRemaining(myList::add);

전체 예제 코드

다음은 Java에서 Iterator를 List로 변환하는 전체 프로그램입니다.

import java.util.*;
public class Demo {
    public static void main(String[] args){
        Iterator<Integer> iterator = Arrays.asList(50, 100, 200, 300, 400, 500, 1000).iterator();
        List<Integer> myList = new ArrayList<>();
        iterator.forEachRemaining(myList::add);
        System.out.println("Iterator to list = "+myList);
    }
}

실행 결과

Iterator to list = [50, 100, 200, 300, 400, 500, 1000]

참고: 다른 변환 방법들

Google Guava 라이브러리를 프로젝트에서 사용 중이라면 Lists.newArrayList() 메서드로 한 줄로 변환할 수 있습니다.

List<Integer> myList = Lists.newArrayList(iterator);

또한 Java 8의 Stream API를 활용하는 방법도 있습니다.

List<Integer> myList = StreamSupport
    .stream(Spliterators.spliteratorUnknownSize(iterator, Spliterator.ORDERED), false)
    .collect(Collectors.toList());

Stream API 방식은 코드가 다소 길어지지만, 변환 과정에서 필터링이나 매핑 같은 추가 연산을 함께 적용할 수 있다는 장점이 있습니다. 다만 외부 라이브러리 없이 가장 직관적이고 효율적인 방법은 forEachRemaining()을 사용하는 것이므로, 일반적인 상황에서는 이 방식을 권장합니다.