>  기사  >  Java  >  Java 8에서 스트림을 역방향하는 방법: 종합 가이드

Java 8에서 스트림을 역방향하는 방법: 종합 가이드

Patricia Arquette
Patricia Arquette원래의
2024-10-31 17:57:01162검색

How to Reverse Streams in Java 8: A Comprehensive Guide

Java 스트림 역방향: 종합 가이드

소개

Java에서 스트림 역방향 8은 다양한 시나리오에서 공통 요구 사항이 될 수 있습니다. 이 기사에서는 특정 사례와 일반 사례를 모두 다루면서 스트림 반전을 달성하기 위한 효과적인 기술을 자세히 설명합니다.

특정 사례: IntStream 반전

IntStream을 반전하려면 맞춤형 접근 방식을 사용하세요. 필요합니다. 다음 revRange 메소드는 지정된 범위 내에서 역방향 IntStream을 생성합니다.

<code class="java">static IntStream revRange(int from, int to) {
    return IntStream.range(from, to)
                    .map(i -> to - i + from - 1);
}</code>

일반 사례: 모든 유형의 스트림 역전

모든 유형의 일반 스트림의 경우 다음이 있습니다. 다음과 같은 여러 접근 방식이 있습니다.

1. 요소 저장 및 역순:

스트림 요소를 배열에 저장한 다음 역순으로 읽습니다.

<code class="java">static <T> Stream<T> reverse(Stream<T> input) {
    Object[] temp = input.toArray();
    return (Stream<T>) IntStream.range(0, temp.length)
                                .mapToObj(i -> temp[temp.length - i - 1]);
}</code>

2. 역방향 목록으로 수집:

수집기를 사용하여 요소를 역방향 목록으로 축적합니다:

<code class="java">Stream<T> input = ... ;
List<T> output =
    input.collect(ArrayList::new,
                  (list, e) -> list.add(0, e),
                  (list1, list2) -> list1.addAll(0, list2));</code>

3. 효율적인 목록 반전(업데이트 2016-01-29):

비효율성을 피하기 위해 전면 삽입을 효율적으로 지원하는 ArrayDeque를 사용하세요.

<code class="java">Deque<String> output =
    input.collect(Collector.of(
        ArrayDeque::new,
        (deq, t) -> deq.addFirst(t),
        (d1, d2) -> { d2.addAll(d1); return d2; }));</code>

요약

이러한 기술은 Java 8 스트림을 역전시키는 효과적인 방법을 제공합니다. 특정 IntStream의 경우 revRange는 전용 솔루션입니다. 일반 스트림의 경우 요소를 저장하거나 목록으로 수집하는 것이 실용적인 옵션을 제공합니다. 목록으로 수집할 때 최적의 효율성을 위해서는 ArrayDeque를 사용해야 합니다.

위 내용은 Java 8에서 스트림을 역방향하는 방법: 종합 가이드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.