Compartir a través de


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 canal de E/S Collectiono una función de generador.

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

Un Spliterator también puede particionar algunos de sus elementos (usando #trySplit) como otro Spliterator, que se usará en operaciones posiblemente paralelas. Es poco probable que las operaciones que usan un divisor que no se pueda dividir, o que lo haga de una manera altamente desequilibrado o ineficaz, se beneficien del paralelismo. Elementos de escape transversales y divididos; cada Spliterator es útil solo para un único cálculo masivo.

Un Spliterator también informa de un conjunto de #characteristics() su estructura, origen y elementos de entre #ORDERED, , #DISTINCT, #SORTED#SIZED, #NONNULL, , #IMMUTABLE, #CONCURRENTy #SUBSIZED. Los clientes de Spliterator pueden emplearlos para controlar, especializar o simplificar el cálculo. Por ejemplo, un Spliterator para un Collection informe SIZED, un Spliterator para un Set informe DISTINCTy un Spliterator para un SortedSet informe 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 ORDEREDes , los métodos de recorrido deben ajustarse a su ordenación documentada. Las nuevas características se pueden definir en el futuro, por lo que los implementadores no deben asignar significados a valores no registrados.

"binding">A Spliterator that does not report <c>IMMUTABLE</c> or <c>CONCURRENT</c> is expected to have a documented policy concerning: when the spliterator <em>binds</em> to the element source; and detection of structural interference of the element source detected after binding. 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 divisor. Un Spliterator que no <es em>late-binding</em> enlaza con el origen de los 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, de mejor manera, producir ConcurrentModificationException si se detectan interferencias estructurales. Los divisores que lo hacen se denominan <em>fail-fast</em>. El método de recorrido masivo (#forEachRemaining forEachRemaining()) de un spliterador 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 use un subproceso a la vez. Por lo general, esto es 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. Una llamada a subprocesos #trySplit() puede entregar el divisor 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 separador desactivado 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 haya comenzado el recorrido.

Las especializaciones de subtipo primitivo de Spliterator se proporcionan para OfInt intlos valores , OfLong longy OfDouble double . Implementaciones predeterminadas de subtipo de valores primitivos de Spliterator#tryAdvance(java.util.function.Consumer) cuadro y Spliterator#forEachRemaining(java.util.function.Consumer) en instancias de su clase contenedora correspondiente. Este boxeo puede perjudicar las ventajas de rendimiento obtenidas 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 conversión boxing y #forEachRemaining(java.util.function.Consumer) forEachRemaining() no afecta al orden en que se encuentran los valores, transformados en valores conversión boxing.

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 abierto de Android y se usan según los términos descritos en la licencia de atribución de Creative Commons 2.5.

Propiedades

Comparator

Si el origen de este spliterador 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 dada 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 este Spliterator #characteristics contiene todas las características dadas.

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, devolviendo true; else devuelve false.

TrySplit()

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

UnregisterFromRuntime()

Anule el registro de esta instancia para que el entorno 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