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
отчетаSIZED
DISTINCT
, а также разделитель для 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 long
OfDouble 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 |
Если источник разделителя равен |
ExactSizeIfKnown |
Удобный метод, возвращающий |
Handle |
Возвращает значение JNI базового объекта Android. (Унаследовано от IJavaObject) |
JniIdentityHashCode |
Возвращает значение |
JniManagedPeerState |
Состояние управляемого однорангового узла. (Унаследовано от IJavaPeerable) |
JniPeerMembers |
Поддержка доступа к членам и вызовов. (Унаследовано от IJavaPeerable) |
PeerReference |
JniObjectReference Возвращает экземпляр объекта Java в оболочке. (Унаследовано от IJavaPeerable) |
Методы
Characteristics() |
Возвращает набор характеристик этого сплитатора и его элементов. |
Disposed() |
Вызывается при удалении экземпляра. (Унаследовано от IJavaPeerable) |
DisposeUnlessReferenced() |
Если нет невыполненных ссылок на этот экземпляр, то вызывается |
EstimateSize() |
Возвращает оценку количества элементов, которые будут встречаться в обходе |
Finalized() |
Вызывается при завершении экземпляра. (Унаследовано от IJavaPeerable) |
ForEachRemaining(IConsumer) |
Выполняет заданное действие для каждого оставшегося элемента последовательно в текущем потоке, пока не будут обработаны все элементы или действие выдает исключение. |
HasCharacteristics(Int32) |
Возвращает значение |
SetJniIdentityHashCode(Int32) |
Задайте значение, возвращаемое |
SetJniManagedPeerState(JniManagedPeerStates) |
Объект для обхода и секционирования элементов источника. (Унаследовано от IJavaPeerable) |
SetPeerReference(JniObjectReference) |
Задайте значение, возвращаемое |
TryAdvance(IConsumer) |
Если оставшийся элемент существует, выполняет заданное действие по нему, возвращая |
TrySplit() |
Если этот разделитель может быть секционирован, возвращает разделитель, охватывающий элементы, которые по возвращении из этого метода не будут охвачены этим разделителем. |
UnregisterFromRuntime() |
Отмените регистрацию этого экземпляра, чтобы среда выполнения не возвращала ее из будущих Java.Interop.JniRuntime+JniValueManager.PeekValue вызовов. (Унаследовано от IJavaPeerable) |
Методы расширения
JavaCast<TResult>(IJavaObject) |
Выполняет преобразование типа, проверяемого средой выполнения Android. |
JavaCast<TResult>(IJavaObject) |
Объект для обхода и секционирования элементов источника. |
GetJniTypeName(IJavaPeerable) |
Объект для обхода и секционирования элементов источника. |