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 |
Если источник разделителя равен |
| 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) |
Объект для обхода и секционирования элементов источника. |