ISpliterator Interfaz
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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 Collection
o 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
, #CONCURRENT
y #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 DISTINCT
y 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 ORDERED
es , 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 int
los valores , OfLong long
y 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 |
ExactSizeIfKnown |
Método de conveniencia que devuelve |
Handle |
Obtiene el valor JNI del objeto Android subyacente. (Heredado de IJavaObject) |
JniIdentityHashCode |
Devuelve el valor de |
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 |
EstimateSize() |
Devuelve una estimación del número de elementos que encontraría un |
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 |
SetJniIdentityHashCode(Int32) |
Establezca el valor devuelto por |
SetJniManagedPeerState(JniManagedPeerStates) |
Objeto para recorrer y particionar elementos de un origen. (Heredado de IJavaPeerable) |
SetPeerReference(JniObjectReference) |
Establezca el valor devuelto por |
TryAdvance(IConsumer) |
Si existe un elemento restante, realiza la acción especificada en él, devolviendo |
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. |