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

인덱스 액세스를 사용하여 Java 8 스트림을 효율적으로 반복하려면 어떻게 해야 합니까?

Susan Sarandon
풀어 주다: 2024-12-18 14:32:17
원래의
534명이 탐색했습니다.

How Can I Efficiently Iterate Through a Java 8 Stream with Index Access?

Java 8의 간결한 인덱스 기반 스트림 반복

많은 프로그래밍 작업에는 해당 인덱스에 액세스하는 동안 데이터 구조를 반복하는 작업이 포함됩니다. Java 8 스트림은 스트림 처리를 위한 광범위한 작업을 제공하지만 반복 중에 인덱스를 얻는 명시적인 방법은 없습니다.

제공된 Java 코드는 IntStream, boxed(), zip( ), 필터(), 맵() 및 수집()이 있습니다. 원하는 결과를 달성하지만 길이와 복잡성으로 인해 우아함이 손상됩니다.

가장 깔끔한 방법:

가장 간결한 접근 방식은 인덱스 스트림에서 시작하는 것입니다.

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());
로그인 후 복사

이 메서드는 0부터 배열 길이까지 인덱스 스트림을 구성하고 인덱스를 필터링합니다. 해당 문자열의 길이를 기준으로 인덱스를 해당 문자열에 매핑하고 결과를 목록으로 수집합니다.

대체 방법:

또 다른 옵션은 다음과 같습니다. AtomicInteger와 같은 변경 가능한 개체를 사용하여 임시 인덱스 카운터를 유지 관리합니다.

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());
로그인 후 복사

이 방법은 for-loop 기반 인덱스 증가의 친숙함. 그러나 병렬 스트림에서 이 방법을 사용하면 병렬 처리의 비결정적 순서로 인해 잘못된 동작이 발생할 수 있다는 점에 유의해야 합니다.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿