>Java >java지도 시간 >Java 8 스트림 및 액세스 색인을 통해 효율적으로 반복하려면 어떻게 해야 합니까?

Java 8 스트림 및 액세스 색인을 통해 효율적으로 반복하려면 어떻게 해야 합니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-27 12:10:10930검색

How Can I Efficiently Iterate Through a Java 8 Stream and Access Indices?

Java 8에서 인덱스를 사용한 효율적인 스트림 반복

소개

Java 8에서 스트림을 반복하는 동안 인덱스에 액세스하는 것은 다음과 같습니다. 특히 LINQ에 비해 지루한 작업입니다. 이 기사에서는 이 기능을 달성하는 간결하고 효율적인 방법을 탐구합니다.

중간 솔루션

한 가지 접근 방식은 다음을 사용하여 인덱스 스트림을 요소 스트림과 결합하는 것입니다. zip 방식. 그러나 이 방법은 이동되거나 제거되어 접근 방식에 대한 접근이 어려워졌습니다.

가장 깔끔한 방법: 인덱스에서

더 간소화된 솔루션은 인덱스 스트림. 이는 IntStream.range()를 사용하여 달성할 수 있으며 필터링 및 매핑 작업을 위한 편리한 시작점을 제공합니다.

String[] names = {"Sam", "Pamela", "Dave", "Pascal", "Erik"};
IntStream.range(0, names.length)
         .filter(i -> names[i].length() <= i)
         .mapToObj(i -> names[i])
         .collect(Collectors.toList());

변경 가능한 인덱스 사용

또 다른 대안은 다음과 같습니다. AtomicInteger와 같은 변경 가능한 객체를 사용하여 임시 카운터를 유지합니다. 이 접근 방식은 기존 for 루프와 유사합니다.

String[] names = {"Sam", "Pamela", "Dave", "Pascal", "Erik"};
AtomicInteger index = new AtomicInteger();
List<String> list = Arrays.stream(names)
                          .filter(n -> n.length() <= index.incrementAndGet())
                          .collect(Collectors.toList());

병렬 스트림에 대한 주의 사항

병렬 스트림에서 후자의 방법을 사용하면 문제가 발생할 수 있다는 점에 유의하는 것이 중요합니다. 순서대로 처리되지 않을 수 있습니다.

위 내용은 Java 8 스트림 및 액세스 색인을 통해 효율적으로 반복하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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