다음을 통해 공유


ISpliterator 인터페이스

정의

원본의 요소를 트래버스 및 분할하기 위한 개체입니다.

[Android.Runtime.Register("java/util/Spliterator", "", "Java.Util.ISpliteratorInvoker", ApiSince=24)]
[Java.Interop.JavaTypeParameters(new System.String[] { "T" })]
public interface ISpliterator : Android.Runtime.IJavaObject, IDisposable, Java.Interop.IJavaPeerable
[<Android.Runtime.Register("java/util/Spliterator", "", "Java.Util.ISpliteratorInvoker", ApiSince=24)>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "T" })>]
type ISpliterator = interface
    interface IJavaObject
    interface IDisposable
    interface IJavaPeerable
파생
특성
구현

설명

원본의 요소를 트래버스 및 분할하기 위한 개체입니다. Spliterator에서 다루는 요소의 원본은 배열, CollectionIO 채널 또는 생성기 함수와 같은 것일 수 있습니다.

분할자는 요소를 개별적으로(#tryAdvance tryAdvance()) 또는 순차적으로 대량(#forEachRemaining forEachRemaining())으로 트래버스할 수 있습니다.

또한 분할기는 병렬 작업에 사용할 수 있도록 일부 요소를 다른 분할기로 분할(사용 #trySplit)할 수도 있습니다. 분할할 수 없거나 매우 불균형하거나 비효율적인 방식으로 분할할 수 없는 Spliterator를 사용하는 작업은 병렬 처리의 이점을 얻을 수 없습니다. 통과 및 배기 요소 분할; 각 분할기는 단일 대량 계산에만 유용합니다.

또한 Spliterator는 , ,, , 및 사이에서 #SORTED#NONNULL#CONCURRENT#ORDERED#DISTINCT#SIZED#IMMUTABLE구조, 원본 및 #SUBSIZED요소 집합 #characteristics() 을 보고합니다. 분할자 클라이언트에서 계산을 제어, 특수화 또는 간소화하는 데 사용할 수 있습니다. 예를 들어 would 보고서에 대한 Collection Spliterator, 보고 SIZED할 보고서에 대한 SetDISTINCT분할자, 보고할 보고서에 대한 SortedSet 분할자도 있습니다 SORTED. 특성은 단순 통합 비트 집합으로 보고됩니다.

일부 특성은 메서드 동작을 추가로 제한합니다. 예를 들어 ORDERED순회 메서드는 문서화된 순서를 따라야 합니다. 나중에 새 특성을 정의할 수 있으므로 구현자는 목록에 없는 값에 의미를 할당해서는 안 됩니다.

"binding">c IMMUTABLE</c>> 또는 <c>CONCURRENT</c>를 보고<하지 않는 분할자는 분할기가 <>요소 원본에 바인딩/em>을 바인딩<할 때 및 바인딩 후 검색된 요소 원본의 구조적 간섭 감지와 관련된 문서화된 정책을 포함해야 합니다. <em>late-binding</em> Spliterator는 Spliterator가 생성될 때가 아니라 예상 크기에 대한 첫 번째 순회, 첫 번째 분할 또는 첫 번째 쿼리의 지점에서 요소의 원본에 바인딩됩니다. 지연 바인딩</em>이 아닌 <>스플리터레이터는 생성 시점 또는 메서드의 첫 번째 호출에 있는 요소의 원본에 바인딩됩니다. 분할기가 트래버스될 때 바인딩하기 전에 원본을 수정한 내용이 반영됩니다. 분할기를 바인딩한 후에는 구조적 간섭이 감지되면 최상의 노력으로 throw ConcurrentModificationException 해야 합니다. 이 작업을 수행하는 분할기를 em fail-fast</em이라고 합니다.<>> 스플리터레이터의 대량 순회 방법(#forEachRemaining forEachRemaining())은 요소별로 확인하고 즉시 실패하는 대신 모든 요소가 트래버스된 후 순회를 최적화하고 구조적 간섭을 확인할 수 있습니다.

스플리터레이터는 메서드를 통해 #estimateSize 나머지 요소의 수를 예측할 수 있습니다. 특성 #SIZED에 반영된 것처럼 이 값은 성공적인 순회에서 발생할 요소 수에 정확히 해당합니다. 그러나 정확히 알려지지 않은 경우에도 예상 값은 더 분할하거나 나머지 요소를 순차적으로 트래버스하는 것이 바람직한지 여부를 결정하는 것과 같이 원본에서 수행되는 작업에 여전히 유용할 수 있습니다.

병렬 알고리즘의 명백한 유틸리티에도 불구하고 분할기는 스레드로부터 안전하지 않을 것으로 예상됩니다. 대신 분할기를 사용하는 병렬 알고리즘을 구현하면 분할기가 한 번에 하나의 스레드에서만 사용되도록 해야 합니다. 이는 일반적으로 직>렬 스레드 제한</em>을 통해 <쉽게 얻을 수 있으며, 이는 재귀 분해에서 작동하는 일반적인 병렬 알고리즘의 자연스러운 결과입니다. 스레드 호출 #trySplit() 은 반환된 Spliterator를 다른 스레드로 넘겨줄 수 있으며, 이 스레드는 해당 Spliterator를 트래버스하거나 추가로 분할할 수 있습니다. 두 개 이상의 스레드가 동일한 분할기에서 동시에 작동하는 경우 분할 및 순회 동작은 정의되지 않습니다. 원래 스레드가 처리를 위해 스플리터레이터를 다른 스레드로 #tryAdvance(Consumer) tryAdvance()넘겨주는 경우 특정 보장(예: 스플리터레이터의 #estimateSize()SIZED 정확도)은 통과가 시작되기 전에만 유효하기 때문에 요소가 사용되기 전에 해당 핸드오프가 발생하는 것이 가장 좋습니다.

기본 하위 형식 특수화 Spliterator 는 , OfLong longOfDouble double 값에 대해 OfInt int제공됩니다. 해당 래퍼 클래스의 Spliterator#tryAdvance(java.util.function.Consumer) 인스턴스에 대한 기본값 및 Spliterator#forEachRemaining(java.util.function.Consumer) 상자 기본값의 하위 형식 기본 구현입니다. 이러한 권투는 기본 특수화를 사용하여 얻은 성능 이점을 훼손할 수 있습니다. boxing을 방지하려면 해당 기본 기반 메서드를 사용해야 합니다. 예를 들어 기본 Spliterator.OfInt#tryAdvance(java.util.function.IntConsumer) 설정 Spliterator.OfInt#tryAdvance(java.util.function.Consumer) 에서 Spliterator.OfInt#forEachRemaining(java.util.function.IntConsumer) 사용되어야 합니다Spliterator.OfInt#forEachRemaining(java.util.function.Consumer). boxing 기반 메서드 #tryAdvance tryAdvance() 를 사용하여 기본 값을 트래버스하며 #forEachRemaining(java.util.function.Consumer) forEachRemaining() , 상자가 지정된 값으로 변환된 값이 발생하는 순서에는 영향을 주지 않습니다.

1.8에 추가되었습니다.

에 대한 java.util.SpliteratorJava 설명서

이 페이지의 일부는 Android 오픈 소스 프로젝트에서 만들고 공유하고 Creative Commons 2.5 특성 라이선스에 설명된 용어에 따라 사용되는 작업을 기반으로 하는 수정 사항입니다.

속성

Comparator

이 Spliterator의 원본이 #SORTED a인 Comparator경우 해당 Comparator값을 반환합니다.

ExactSizeIfKnown

이 Spliterator가 다른 경우 반환 #estimateSize() 되는 편의 메서드입니다-1#SIZED.

Handle

기본 Android 개체의 JNI 값을 가져옵니다.

(다음에서 상속됨 IJavaObject)
JniIdentityHashCode

래핑된 인스턴스의 java.lang.System.identityHashCode() 값을 반환합니다.

(다음에서 상속됨 IJavaPeerable)
JniManagedPeerState

관리되는 피어의 상태입니다.

(다음에서 상속됨 IJavaPeerable)
JniPeerMembers

멤버 액세스 및 호출 지원.

(다음에서 상속됨 IJavaPeerable)
PeerReference

JniObjectReference 래핑된 Java 개체 인스턴스의 값을 반환합니다.

(다음에서 상속됨 IJavaPeerable)

메서드

Characteristics()

이 Spliterator 및 해당 요소의 특성 집합을 반환합니다.

Disposed()

인스턴스가 삭제되었을 때 호출됩니다.

(다음에서 상속됨 IJavaPeerable)
DisposeUnlessReferenced()

이 인스턴스에 대한 미해결 참조가 없으면 호출 Dispose()합니다. 그렇지 않으면 아무 작업도 수행하지 않습니다.

(다음에서 상속됨 IJavaPeerable)
EstimateSize()

순회에서 발생할 요소 수의 추정값을 #forEachRemaining 반환하거나 무한하거나 알 수 없거나 컴퓨팅 비용이 너무 많이 드는 경우 반환 Long#MAX_VALUE 합니다.

Finalized()

인스턴스가 종료될 때 호출됩니다.

(다음에서 상속됨 IJavaPeerable)
ForEachRemaining(IConsumer)

모든 요소가 처리되거나 작업이 예외를 throw할 때까지 나머지 각 요소에 대해 지정된 작업을 현재 스레드에서 순차적으로 수행합니다.

HasCharacteristics(Int32)

이 Spliterator의 #characteristics 지정된 특성이 모두 포함되어 있는지를 반환 true 합니다.

SetJniIdentityHashCode(Int32)

에서 반환 JniIdentityHashCode하는 값을 설정합니다.

(다음에서 상속됨 IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

원본의 요소를 트래버스 및 분할하기 위한 개체입니다.

(다음에서 상속됨 IJavaPeerable)
SetPeerReference(JniObjectReference)

에서 반환 PeerReference하는 값을 설정합니다.

(다음에서 상속됨 IJavaPeerable)
TryAdvance(IConsumer)

나머지 요소가 있으면 지정된 동작을 수행하고 반환합니다. true그렇지 않으면 반환됩니다 false.

TrySplit()

이 분할자를 분할할 수 있는 경우 요소를 포함하는 Spliterator를 반환합니다. 이 메서드에서 반환될 때는 이 Spliterator에서 다루지 않습니다.

UnregisterFromRuntime()

런타임이 이후 Java.Interop.JniRuntime+JniValueManager.PeekValue 호출에서 반환되지 않도록 이 인스턴스의 등록을 취소합니다.

(다음에서 상속됨 IJavaPeerable)

확장 메서드

JavaCast<TResult>(IJavaObject)

Android 런타임 확인 형식 변환을 수행합니다.

JavaCast<TResult>(IJavaObject)

원본의 요소를 트래버스 및 분할하기 위한 개체입니다.

GetJniTypeName(IJavaPeerable)

원본의 요소를 트래버스 및 분할하기 위한 개체입니다.

적용 대상