ISpliterator Interfaz

Definición

Objeto para recorrer y particionar elementos de un origen.

[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
Derivado
Atributos
Implementaciones

Comentarios

Objeto para recorrer y particionar elementos de un origen. El origen de los elementos cubiertos por un Spliterator podría ser, por ejemplo, una matriz, un Collectioncanal de E/S o una función de generador.

Un spliterador puede atravesar elementos individualmente (#tryAdvance tryAdvance()) o secuencialmente en masa (#forEachRemaining forEachRemaining()).

Un Spliterator también puede particionar algunos de sus elementos (mediante #trySplit) como otro Spliterator, que se usará en operaciones posiblemente paralelas. Es poco probable que las operaciones que usen un spliterador que no se puedan dividir, o que lo hacen de una manera altamente desequilibrado o ineficaz, se beneficien del paralelismo. Recorrido y división de elementos de escape; cada Spliterator es útil para un solo cálculo masivo.

Un Spliterator también informa de un conjunto de #characteristics() su estructura, origen y elementos de entre #ORDERED, #NONNULL#SORTED#DISTINCT#SIZED, #IMMUTABLE, y . #CONCURRENT#SUBSIZED Los clientes de Spliterator pueden emplearlos para controlar, especializar o simplificar el cálculo. Por ejemplo, un Spliterator para un Collection informe SIZEDde , un Spliterator para un Set informe DISTINCTy un Spliterator para un SortedSet también notificaría SORTED. Las características se notifican como un conjunto de bits de unión simple.

Algunas características restringen además el comportamiento del método; por ejemplo, si ORDERED, los métodos de recorrido deben cumplir su ordenación documentada. Las nuevas características se pueden definir en el futuro, por lo que los implementadores no deben asignar significados a los valores no registrados.

"binding">Se espera que un divisor que no notifique <c>IMMUTABLE</c> o <c>CONCURRENT</c> tiene una directiva documentada relativa a: cuando el divisor <em>enlaza</em> al origen del elemento; y la detección de interferencias estructurales del origen del elemento detectado después del enlace. Un <spliterator em>late-binding</em> enlaza con el origen de los elementos en el punto del primer recorrido, la primera división o la primera consulta para el tamaño estimado, en lugar de en el momento en que se crea el Spliterator. Un spliterador que no <es em late-binding<>/em> enlaza con el origen de elementos en el punto de construcción o la primera invocación de cualquier método. Las modificaciones realizadas en el origen antes del enlace se reflejan cuando se recorre spliterator. Después de enlazar un Spliterator debe, según el mejor esfuerzo, producir ConcurrentModificationException si se detectan interferencias estructurales. Los divisores que hacen esto se denominan <em>fail-fast</em>. El método de recorrido masivo (#forEachRemaining forEachRemaining()) de un Spliterator puede optimizar el recorrido y comprobar la interferencia estructural después de que se hayan recorrido todos los elementos, en lugar de comprobar por elemento y producir errores inmediatamente.

Los divisores pueden proporcionar una estimación del número de elementos restantes a través del #estimateSize método . Idealmente, como se refleja en la característica #SIZED, este valor corresponde exactamente al número de elementos que se encontrarían en un recorrido correcto. Sin embargo, incluso cuando no se conoce exactamente, un valor estimado puede ser útil para las operaciones que se realizan en el origen, como ayudar a determinar si es preferible dividir o recorrer los elementos restantes secuencialmente.

A pesar de su utilidad obvia en algoritmos paralelos, no se espera que los divisores sean seguros para subprocesos; en su lugar, las implementaciones de algoritmos paralelos que usan divisores deben asegurarse de que el divisor solo lo usa un subproceso cada vez. Esto es generalmente fácil de lograr a través <de la>contención< de subprocesos en serie/em>, que a menudo es una consecuencia natural de los algoritmos paralelos típicos que funcionan por descomposición recursiva. Un subproceso que llama #trySplit() puede entregar el Spliterator devuelto a otro subproceso, que a su vez puede atravesar o dividir aún más ese Spliterator. El comportamiento de división y recorrido no está definido si dos o más subprocesos funcionan simultáneamente en el mismo divisor. Si el subproceso original entrega un divisor a otro subproceso para su procesamiento, es mejor si esa entrega se produce antes de que se consuman elementos con #tryAdvance(Consumer) tryAdvance(), ya que ciertas garantías (como la precisión de #estimateSize() para SIZED los divisores) solo son válidas antes de que se haya iniciado el recorrido.

Las especializaciones de subtipo primitivo de Spliterator se proporcionan para OfInt intlos valores , OfLong longy OfDouble double . Las implementaciones predeterminadas del subtipo de los valores primitivos de Spliterator#tryAdvance(java.util.function.Consumer) y Spliterator#forEachRemaining(java.util.function.Consumer) box en instancias de su clase contenedora correspondiente. Este boxeo puede perjudicar las ventajas de rendimiento adquiridas mediante el uso de especializaciones primitivas. Para evitar la conversión boxing, se deben usar los métodos basados en primitivos correspondientes. Por ejemplo, Spliterator.OfInt#tryAdvance(java.util.function.IntConsumer) y Spliterator.OfInt#forEachRemaining(java.util.function.IntConsumer) deben usarse en preferencia para Spliterator.OfInt#tryAdvance(java.util.function.Consumer) y Spliterator.OfInt#forEachRemaining(java.util.function.Consumer). Recorrido de valores primitivos mediante métodos #tryAdvance tryAdvance() basados en boxing y #forEachRemaining(java.util.function.Consumer) forEachRemaining() no afecta al orden en que se encuentran los valores, transformados en valores boxing.

Se ha agregado en la versión 1.8.

Documentación de Java para java.util.Spliterator.

Las partes de esta página son modificaciones basadas en el trabajo creado y compartido por el proyecto de código Project y que se usan según los términos Creative Commons 2.5 Attribution License.

Propiedades

Comparator

Si el origen de este Spliterator es #SORTED mediante , Comparatordevuelve .Comparator

ExactSizeIfKnown

Método de conveniencia que devuelve #estimateSize() si este Spliterator es #SIZED, de lo contrario -1.

Handle

Obtiene el valor JNI del objeto Android subyacente.

(Heredado de IJavaObject)
JniIdentityHashCode

Devuelve el valor de java.lang.System.identityHashCode() para la instancia ajustada.

(Heredado de IJavaPeerable)
JniManagedPeerState

Estado del mismo nivel administrado.

(Heredado de IJavaPeerable)
JniPeerMembers

Compatibilidad con la invocación y el acceso de miembros.

(Heredado de IJavaPeerable)
PeerReference

Devuelve una JniObjectReference de la instancia de objeto Java ajustada.

(Heredado de IJavaPeerable)

Métodos

Characteristics()

Devuelve un conjunto de características de este Spliterator y sus elementos.

Disposed()

Se llama cuando se ha eliminado la instancia.

(Heredado de IJavaPeerable)
DisposeUnlessReferenced()

Si no hay referencias pendientes a esta instancia, llama a Dispose(); de lo contrario, no hace nada.

(Heredado de IJavaPeerable)
EstimateSize()

Devuelve una estimación del número de elementos que encontraría un #forEachRemaining recorrido, o devuelve Long#MAX_VALUE si es infinito, desconocido o demasiado caro de calcular.

Finalized()

Se llama cuando se ha finalizado la instancia.

(Heredado de IJavaPeerable)
ForEachRemaining(IConsumer)

Realiza la acción especificada para cada elemento restante, secuencialmente en el subproceso actual, hasta que se hayan procesado todos los elementos o la acción produzca una excepción.

HasCharacteristics(Int32)

Devuelve true si el spliterador #characteristics contiene todas las características especificadas.

SetJniIdentityHashCode(Int32)

Establezca el valor devuelto por JniIdentityHashCode.

(Heredado de IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

Objeto para recorrer y particionar elementos de un origen.

(Heredado de IJavaPeerable)
SetPeerReference(JniObjectReference)

Establezca el valor devuelto por PeerReference.

(Heredado de IJavaPeerable)
TryAdvance(IConsumer)

Si existe un elemento restante, realiza la acción especificada en él y devuelve true; else devuelve false.

TrySplit()

Si este divisor se puede particionar, devuelve un spliterador que cubre los elementos, que, tras la devolución de este método, no estará cubierto por este spliterador.

UnregisterFromRuntime()

Anule el registro de esta instancia para que el tiempo de ejecución no lo devuelva de invocaciones futuras Java.Interop.JniRuntime+JniValueManager.PeekValue .

(Heredado de IJavaPeerable)

Métodos de extensión

JavaCast<TResult>(IJavaObject)

Realiza una conversión de tipos comprobados en tiempo de ejecución de Android.

JavaCast<TResult>(IJavaObject)

Objeto para recorrer y particionar elementos de un origen.

GetJniTypeName(IJavaPeerable)

Objeto para recorrer y particionar elementos de un origen.

Se aplica a