Spliterator<T> — 요소 순회와 분할을 위한 객체

Spliterator — 요소 순회와 분할을 위한 객체

소스(source)의 요소를 순회하고 분할하기 위한 객체예요. 소스는 예를 들어 배열, Collection, IO 채널, 생성기 함수가 될 수 있어요.

출처: Java API Reference

본문

public interface Spliterator<T>

Spliterator는 tryAdvance()로 요소를 개별적으로 순회하거나 forEachRemaining()으로 일괄(bulk) 순차 순회할 수 있어요. 또한 trySplit()을 사용해 자신의 일부 요소를 다른 Spliterator로 분할해 병렬 연산에 사용할 수 있어요.

분할할 수 없거나 매우 불균형하거나 비효율적으로 분할하는 Spliterator를 사용하는 연산은 병렬성의 이점을 얻기 어려워요. 순회와 분할은 요소를 소진하므로, 각 Spliterator는 단일 일괄 계산에만 유용해요.

특성(characteristics)

Spliterator는 구조·소스·요소에 대한 특성 집합을 보고해요: ORDERED, DISTINCT, SORTED, SIZED, NONNULL, IMMUTABLE, CONCURRENT, SUBSIZED.

예를 들어 Collection용 Spliterator는 SIZED, Set용은 DISTINCT, SortedSet용은 SORTED를 보고해요. 특성은 단순히 합쳐진 비트 집합으로 보고돼요.

주요 메서드

  • tryAdvance(Consumer<? super T> action) — 남은 요소가 있으면 그 요소를 위해 주어진 action을 수행하고 true를, 없으면 false를 반환해요.
  • forEachRemaining(Consumer<? super T> action) — 남은 모든 요소에 대해 주어진 action을 현재 스레드에서 순차적으로 수행해요.
  • trySplit() — 이 spliterator의 일부 요소를 분할해 새 Spliterator를 반환하고, 분할할 수 없으면 null을 반환해요.
  • estimateSize()forEachRemaining 순회에서 만날 것으로 예상되는 요소 수의 추정치를 반환해요.
  • getExactSizeIfKnown() — 이 spliterator가 SIZED이면 estimateSize()를 반환하고, 아니면 -1을 반환해요.
  • characteristics() — 이 spliterator와 그 요소의 특성 집합을 반환해요.
  • hasCharacteristics(int characteristics) — 주어진 특성이 모두 있으면 true를 반환해요.

IMMUTABLE이나 CONCURRENT를 보고하지 않는 Spliterator는 소스에 바인딩되는 시점과 레이트-바인딩(late-binding) 정책에 대한 문서화된 정책이 있어야 해요.

  • 도입 시점(Since): 1.8

더 알아보기 (Learn more)