[java] Java 8 IntStream을 List로 어떻게 변환합니까?

나는에 대한 문서 찾고 있어요 IntStream, 그리고 나는 볼 toArray방법을,하지만 방법은 직접 갈하기List<Integer>

Stream를 a 로 변환하는 방법 이 List있습니까?



답변

IntStream::boxed

IntStream::boxed는 회전 IntStreamStream<Integer>다음, 어떤 작업을 수행 할 수 있습니다 collectList:

theIntStream.boxed().collect(Collectors.toList())

boxed메소드는의 int프리미티브 값 IntStreamInteger객체 스트림으로 변환 합니다. “복싱” 이라는 단어 는 intInteger변환 과정을 나타냅니다. Oracle Tutorial을 참조하십시오 .


답변

Stream에서 mapToObj ()를 사용할 수도 있습니다. IntFunction을 사용하고 지정된 함수를이 스트림의 요소에 적용한 결과로 구성된 객체 값 스트림을 반환합니다.

List<Integer> intList = myIntStream.mapToObj(i->i).collect(Collectors.toList());


답변

Eclipse 콜렉션 에서 사용 가능한 기본 콜렉션을 사용하고 권투를 피할 수 있습니다 .

MutableIntList list =
    IntStream.range(1, 5)
    .collect(IntArrayList::new, MutableIntList::add, MutableIntList::addAll);

참고 : 저는 Eclipse Collections에 기고자입니다.


답변

Java 8을 사용하여 각 int 요소의 제곱을 찾는 다음 예제를 찾으십시오.

IntStream ints = Arrays.stream(new int[] {1,2,3,4,5});
List<Integer> intsList = ints.map(x-> x*x)
          .collect(ArrayList<Integer>::new, ArrayList::add, ArrayList::addAll);


답변

collect 메소드를 사용할 수 있습니다.

IntStream.of(1, 2, 3).collect(ArrayList::new, List::add, List::addAll);

실제로 이것은 객체 스트림에서 .collect (Collectors.toList ())를 호출 할 때 Java가 수행하는 작업과 거의 동일합니다.

public static <T> Collector<T, ?, List<T>> toList() {
    return new Collectors.CollectorImpl(ArrayList::new, List::add, (var0, var1) -> {
        var0.addAll(var1);
        return var0;
    }, CH_ID);
}

참고 : 세 번째 매개 변수는 병렬 콜렉션을 실행하려는 경우에만 필요합니다. 처음 두 개만 제공하는 순차적 인 수집으로 충분합니다.


답변