Поделиться через


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
Производный
Атрибуты
Реализации

Комментарии

Объект для обхода и секционирования элементов источника. Источник элементов, охватываемых сплитатором, может быть, например массив, Collectionканал ввода-вывода или функция генератора.

Разделитель может проходить по отдельности (#tryAdvance tryAdvance()) или последовательно в массовом порядке (#forEachRemaining forEachRemaining()).

Разделитель также может секционировать некоторые из его элементов (с помощью #trySplit) в качестве другого разбиения, который будет использоваться в возможно параллельных операциях. Операции с помощью сплитатора, который не может разделить или делает это в весьма несбалансированной или неэффективной манере, вряд ли выиграют от параллелизма. Обход и разделение элементов исчерпания; каждый разделитель полезен только для одного массового вычисления.

Разделитель также сообщает набор #characteristics() его структуры, источника и элементов из #ORDERED, из , , #SIZED#IMMUTABLE#SORTED#NONNULL#DISTINCTи . #CONCURRENT#SUBSIZED Они могут использоваться клиентами Spliterator для управления, специализации или упрощения вычислений. Например, разделитель для Collection отчета, разделитель для отчета, разделитель для Set отчетаSIZEDDISTINCT, а также разделитель для SortedSet отчетаSORTED. Характеристики передаются как простой объединяемый битовый набор.

Некоторые характеристики дополнительно ограничивают поведение метода; Например, если ORDEREDметоды обхода должны соответствовать их документированного порядка. Новые характеристики могут быть определены в будущем, поэтому разработчики не должны назначать значения для незаписанных значений.

"Binding">A Spliterator, который не сообщает <c>IMMUTABLE</c> или <c>CONCURRENT</c>, должен иметь документированную политику, касающуюся: когда разделитель <em binds</em>> к источнику элемента; и обнаружение структурных помех источника элементов, обнаруженных после привязки. >Em <late-binding</em> Spliterator привязывается к источнику элементов в точке первого обхода, первого разделения или первого запроса на предполагаемый размер, а не во время создания сплитатора. Разделитель, который не <>является em late-binding</em>, привязывается к источнику элементов в точке построения или первом вызове любого метода. Изменения, внесенные в источник до привязки, отражаются при переходе по разделительу. После привязки сплитатора следует, на основе лучших усилий, вызвать ConcurrentModificationException , если обнаруживается структурное вмешательство. Разделители, которые делают это, называются <em>fail-fast</em>. Метод массового обхода (#forEachRemaining forEachRemaining()) сплитатора может оптимизировать обход и проверить структурные помехи после того, как все элементы прошли, а не проверять каждый элемент и немедленно завершать сбой.

Разделители могут предоставить оценку количества оставшихся элементов с помощью #estimateSize метода. В идеале, как отражено в характеристике #SIZED, это значение соответствует точно количеству элементов, которые будут встречаться в успешном обходе. Однако даже если не точно известно, предполагаемое значение может по-прежнему быть полезным для операций, выполняемых в источнике, таких как помощь в определении того, предпочтительнее ли разделять остальные элементы последовательно или пересекать остальные элементы.

Несмотря на их очевидную служебную программу в параллельных алгоритмах, разбиения не должны быть потокобезопасными; Вместо этого реализация параллельных алгоритмов с помощью разбиения должна гарантировать, что разбиение используется только одним потоком. Как правило, это легко достичь с помощью <>последовательного ограничения< потока/em>, что часто является естественным следствием типичных параллельных алгоритмов, которые работают путем рекурсивного декомпозиции. Вызов #trySplit() потока может передать возвращенный разделитель другому потоку, который, в свою очередь, может пройти или дополнительно разделить этот разделитель. Поведение разделения и обхода не определено, если два или более потоков работают одновременно на одном разбиитетеле. Если исходный поток передает разделитель к другому потоку для обработки, рекомендуется, прежде чем какие-либо элементы используются, #tryAdvance(Consumer) tryAdvance()так как определенные гарантии (например, точность #estimateSize()SIZED для разбиений) допустимы только перед началом обхода.

Специализации примитивных подтипов Spliterator предоставляются для OfInt intи OfLong longOfDouble double значений. Реализации подтипа по умолчанию для Spliterator#tryAdvance(java.util.function.Consumer) примитивных значений и Spliterator#forEachRemaining(java.util.function.Consumer) полей для экземпляров соответствующего класса оболочки. Такое бокс может подорвать любые преимущества производительности, полученные с помощью примитивных специализаций. Чтобы избежать бокса, следует использовать соответствующие методы на основе примитивов. Например, Spliterator.OfInt#tryAdvance(java.util.function.IntConsumer) и Spliterator.OfInt#forEachRemaining(java.util.function.IntConsumer) следует использовать в предпочтениях Spliterator.OfInt#tryAdvance(java.util.function.Consumer) и Spliterator.OfInt#forEachRemaining(java.util.function.Consumer). Обход примитивных значений с помощью методов #tryAdvance tryAdvance() на основе бокса и #forEachRemaining(java.util.function.Consumer) forEachRemaining() не влияет на порядок, в котором возникают значения, преобразованные в поля.

Добавлено в версии 1.8.

Документация по Java для java.util.Spliterator.

Части этой страницы — это изменения на основе работы, созданной и общей проектом с открытым исходным кодом Android и используемой в соответствии с условиями, описанными в лицензии Creative Commons 2.5 Attribution.

Свойства

Comparator

Если источник разделителя равен #SORTED источникуComparator, возвращается.Comparator

ExactSizeIfKnown

Удобный метод, возвращающий #estimateSize() значение, если этот разделитель имеет значение #SIZED, в противном случае -1.

Handle

Возвращает значение JNI базового объекта Android.

(Унаследовано от IJavaObject)
JniIdentityHashCode

Возвращает значение java.lang.System.identityHashCode() для упаковаемого экземпляра.

(Унаследовано от IJavaPeerable)
JniManagedPeerState

Состояние управляемого однорангового узла.

(Унаследовано от IJavaPeerable)
JniPeerMembers

Поддержка доступа к членам и вызовов.

(Унаследовано от IJavaPeerable)
PeerReference

JniObjectReference Возвращает экземпляр объекта Java в оболочке.

(Унаследовано от IJavaPeerable)

Методы

Characteristics()

Возвращает набор характеристик этого сплитатора и его элементов.

Disposed()

Вызывается при удалении экземпляра.

(Унаследовано от IJavaPeerable)
DisposeUnlessReferenced()

Если нет невыполненных ссылок на этот экземпляр, то вызывается Dispose(); в противном случае ничего не делает.

(Унаследовано от IJavaPeerable)
EstimateSize()

Возвращает оценку количества элементов, которые будут встречаться в обходе #forEachRemaining или возвращаются Long#MAX_VALUE , если бесконечные, неизвестные или слишком дорогие для вычислений.

Finalized()

Вызывается при завершении экземпляра.

(Унаследовано от IJavaPeerable)
ForEachRemaining(IConsumer)

Выполняет заданное действие для каждого оставшегося элемента последовательно в текущем потоке, пока не будут обработаны все элементы или действие выдает исключение.

HasCharacteristics(Int32)

Возвращает значение true , если этот разделитель #characteristics содержит все указанные характеристики.

SetJniIdentityHashCode(Int32)

Задайте значение, возвращаемое JniIdentityHashCode.

(Унаследовано от IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

Объект для обхода и секционирования элементов источника.

(Унаследовано от IJavaPeerable)
SetPeerReference(JniObjectReference)

Задайте значение, возвращаемое PeerReference.

(Унаследовано от IJavaPeerable)
TryAdvance(IConsumer)

Если оставшийся элемент существует, выполняет заданное действие по нему, возвращая trueзначение ; else возвращается false.

TrySplit()

Если этот разделитель может быть секционирован, возвращает разделитель, охватывающий элементы, которые по возвращении из этого метода не будут охвачены этим разделителем.

UnregisterFromRuntime()

Отмените регистрацию этого экземпляра, чтобы среда выполнения не возвращала ее из будущих Java.Interop.JniRuntime+JniValueManager.PeekValue вызовов.

(Унаследовано от IJavaPeerable)

Методы расширения

JavaCast<TResult>(IJavaObject)

Выполняет преобразование типа, проверяемого средой выполнения Android.

JavaCast<TResult>(IJavaObject)

Объект для обхода и секционирования элементов источника.

GetJniTypeName(IJavaPeerable)

Объект для обхода и секционирования элементов источника.

Применяется к