2014-07-24 2 views
1

자바에서는 N 개의 항목 모음을 각각 하나의 항목으로 이루어진 N 개의 모음으로 변환하는 쉽고 편리한 방법이 있습니까? 나는 수동으로 컬렉션의 각 항목을 거쳐 새로운 컬렉션으로 복사하는 것 이외의 의미입니다.N 개의 항목 모음을 각각 1 개의 N 개의 모음으로 변환 하시겠습니까?

+2

물론입니다. ['Collection'] (http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html)은 ['Iterable']을 구현합니다 (http://docs.oracle.com/javase). /7/docs/api/java/lang/Iterable.html) 및 ['add()'] (http://docs.oracle.com/javase/7/docs/api/java/util/Collection)이 있습니다. html # add (E)) 메소드를 호출합니다. 모든 구현은 인수가없는 생성자를 제공합니다. 아무것도 당신의 작업을 수행하는 데 필요한 것으로 보인다. 실용적인 목적이 있습니까? –

+0

글쎄, N 개의 컬렉션을 일종의 컬렉션에 배치해야하기 때문에, 당신이 가지고있는 것을보고 "완료!"라고 말할 수있는 것처럼 보입니다. –

+1

이 질문은 [코드 검토에 대한 질문] (http://codereview.stackexchange.com/q/57873/31503)을 생성했습니다. – rolfl

답변

2

여기에 자바 8 l1에서 하나 개의 문장으로 그것을 할 수있는 방법 몇 가지 Collection<T>이며, 결과는 각 ArrayList<T> 컬렉션에서 하나 개의 요소를 포함하는 List<ArrayList<T>>이다.

  • 콜렉션의 모든 엘리먼트를 생성 Stream;

    List<ArrayList<T>> l2 = l1.stream().map(x -> new ArrayList<>(Arrays.asList(x))).collect(Collectors.toList()); 
    

    것은 이것이 세분화

  • 각 요소를 해당 요소가 포함 된 ArrayList으로 매핑합니다.
  • ArrayListList<ArrayList>으로 수집합니다.
+2

OP가 모른다는 경우 : 그러한 코드는 Java 8에서만 작동합니다. –

+0

아직 자바 6이 붙어 있습니다.하지만 자바 8에서 새로이 가능한 것을 배우는 것이 좋습니다. 감사합니다. –

0

당신은 구아바를 사용하고자하는 경우처럼 보이는 Function < E, 목록 < E >> 수 : 그런 다음 Collections2의 변환 방법 중 하나를 사용할 수 있습니다

public final class ItemToListFunction<E> implements Function<E, List<E>> 
{ 
    public List<E> apply(E input) 
    { 
     //if it does not need to be mutable 
     return Collections.singletonList(input); 

     //if it does need to be mutable 
     final List<E> list = new ArrayList<E>(); 
     list.add(input); 
     return list; 
    } 
} 

을, Lists 또는 Iterables 이 방법의 장점은 요소에 대한 실제 반복까지 내부 목록 생성이 지연된다는 것입니다.

+0

표준 Java 6 구문 만 사용할 수 있습니다. 그러나 대안을 아는 것이 좋습니다. 감사. –

관련 문제