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