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 중국어 웹사이트의 기타 관련 기사를 참조하세요!