Compartir a través de


ICollector Interfaz

Definición

Una operación de reducción mutable que acumula elementos de entrada en un contenedor de resultados mutable, lo que opcionalmente transforma el resultado acumulado en una representación final una vez procesados todos los elementos de entrada.

[Android.Runtime.Register("java/util/stream/Collector", "", "Java.Util.Streams.ICollectorInvoker", ApiSince=24)]
[Java.Interop.JavaTypeParameters(new System.String[] { "T", "A", "R" })]
public interface ICollector : Android.Runtime.IJavaObject, IDisposable, Java.Interop.IJavaPeerable
[<Android.Runtime.Register("java/util/stream/Collector", "", "Java.Util.Streams.ICollectorInvoker", ApiSince=24)>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "T", "A", "R" })>]
type ICollector = interface
    interface IJavaObject
    interface IDisposable
    interface IJavaPeerable
Atributos
Implementaciones

Comentarios

Una operación de reducción mutable que acumula elementos de entrada en un contenedor de resultados mutable, lo que opcionalmente transforma el resultado acumulado en una representación final una vez procesados todos los elementos de entrada. Las operaciones de reducción se pueden realizar secuencialmente o en paralelo.

Entre los ejemplos de operaciones de reducción mutable se incluyen: acumular elementos en ; Collectionconcatenar cadenas mediante un StringBuilder; información de resumen informático sobre elementos como sum, min, max o average; calcular resúmenes de "tabla dinámica" como "transacción con valores máximos por vendedor", etc. La clase Collectors proporciona implementaciones de muchas reducciones mutables comunes.

Una Collector clase se especifica mediante cuatro funciones que funcionan conjuntamente para acumular entradas en un contenedor de resultados mutable y, opcionalmente, realizar una transformación final en el resultado. Son: <ul><li>creación de un nuevo contenedor de resultados (#supplier())</li>><que incorpora un nuevo elemento de datos en un contenedor de resultados (#accumulator())</li li><>que combina dos contenedores de resultados en un (#combiner())</li li><>realizando una transformación final opcional en el contenedor (#finisher())</li></ul>

Los recopiladores también tienen un conjunto de características, como Characteristics#CONCURRENT, que proporcionan sugerencias que una implementación de reducción puede usar para proporcionar un mejor rendimiento.

Una implementación secuencial de una reducción mediante un recopilador crearía un único contenedor de resultados mediante la función de proveedor e invocaría la función de acumulador una vez para cada elemento de entrada. Una implementación paralela particionaría la entrada, crearía un contenedor de resultados para cada partición, acumularía el contenido de cada partición en un subresult para esa partición y, a continuación, usaría la función del combinador para combinar los subresults en un resultado combinado.

Para asegurarse de que las ejecuciones secuenciales y paralelas producen resultados equivalentes, las funciones del recopilador deben satisfacer una <identidad</>em> em y restricciones de asociatividad.

La restricción de identidad indica que para cualquier resultado acumulado parcialmente, combinarlo con un contenedor de resultados vacío debe generar un resultado equivalente. Es decir, para un resultado a acumulado parcialmente que es el resultado de cualquier serie de invocaciones de acumulador y combinador, a debe ser equivalente a combiner.apply(a, supplier.get()).

La restricción de asociatividad dice que dividir el cálculo debe generar un resultado equivalente. Es decir, para los elementos t1 de entrada y t2, los resultados r1 y r2 en el cálculo siguiente deben ser equivalentes:

{@code
                A a1 = supplier.get();
                accumulator.accept(a1, t1);
                accumulator.accept(a1, t2);
                R r1 = finisher.apply(a1);  // result without splitting

                A a2 = supplier.get();
                accumulator.accept(a2, t1);
                A a3 = supplier.get();
                accumulator.accept(a3, t2);
                R r2 = finisher.apply(combiner.apply(a2, a3));  // result with splitting
            } 

Para los recopiladores que no tienen la UNORDERED característica , dos resultados a1 acumulados y a2 son equivalentes si finisher.apply(a1).equals(finisher.apply(a2)). Para los recopiladores no ordenados, la equivalencia se relaja para permitir la no igualdad relacionada con las diferencias en orden. (Por ejemplo, un recopilador desordenado que acumulaba elementos a un List consideraría dos listas equivalentes si contenían los mismos elementos, ignorando el orden).

Las bibliotecas que implementan la reducción en Collectorfunción de , como Stream#collect(Collector), deben cumplir las siguientes restricciones: <ul><li>El primer argumento pasado a la función de acumulador, ambos argumentos pasados a la función del combinador y el argumento pasado a la función de finalizador debe ser el resultado de una invocación anterior del proveedor de resultados, el acumulador o las funciones del combinador.</li li><>La implementación no debe hacer nada con el resultado de ninguna de las funciones de proveedor, acumulador o combinador de resultados que no sean pasarlas de nuevo al acumulador, combinador o terminador, o devolverlas al autor de la llamada de la operación de reducción.</li li><>Si se pasa un resultado a la función de combinador o finalizador, y el mismo objeto no se devuelve de esa función, nunca se vuelve a usar.</li li><>Una vez que se pasa un resultado a la función de combinador o finalizador, nunca se vuelve a pasar a la función de acumulador.</li li><>Para los recopiladores no simultáneos, los resultados devueltos por el proveedor de resultados, el acumulador o las funciones del combinador deben estar confinados en serie. Esto permite que la recopilación se produzca en paralelo sin Collector necesidad de implementar ninguna sincronización adicional. La implementación de reducción debe administrar que la entrada está correctamente particionada, que las particiones se procesan de forma aislada y la combinación solo se produce después de que se complete la acumulación.</li li><>Para recopiladores simultáneos, una implementación es libre a (pero no es necesario) implementar la reducción simultáneamente. Una reducción simultánea es una en la que se llama a la función de acumulador simultáneamente desde varios subprocesos, utilizando el mismo contenedor de resultados modificable simultáneamente, en lugar de mantener el resultado aislado durante la acumulación. Solo se debe aplicar una reducción simultánea si el recopilador tiene las Characteristics#UNORDERED características o si los datos de origen no están ordenados.</li></ul>

Además de las implementaciones predefinidas en Collectors, los métodos de fábrica estáticos #of(Supplier, BiConsumer, BinaryOperator, Characteristics...) se pueden usar para construir recopiladores. Por ejemplo, podría crear un recopilador que acumula widgets en un TreeSet con:

{@code
                Collector<Widget, ?, TreeSet<Widget>> intoSet =
                    Collector.of(TreeSet::new, TreeSet::add,
                                 (left, right) -> { left.addAll(right); return left; });
            }

(Este comportamiento también lo implementa el recopilador Collectors#toCollection(Supplier)predefinido).

Agregado en la versión 1.8.

Documentación de Java para java.util.stream.Collector.

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

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

Accumulator()

Función que plega un valor en un contenedor de resultados mutable.

Characteristics()

Devuelve un Set de que Collector.Characteristics indica las características de este recopilador.

Combiner()

Función que acepta dos resultados parciales y las combina.

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)
Finalized()

Se llama cuando se ha finalizado la instancia.

(Heredado de IJavaPeerable)
Finisher()

Realice la transformación final del tipo A de acumulación intermedio al tipo Rde resultado final .

Of(ISupplier, IBiConsumer, IBinaryOperator, CollectorCharacteristics[])

Devuelve un nuevo Collector objeto descrito por las funciones , , combinery finisher especificadassupplieraccumulator.

Of(ISupplier, IBiConsumer, IBinaryOperator, IFunction, CollectorCharacteristics[])

Devuelve un nuevo Collector objeto descrito por las funciones , , combinery finisher especificadassupplieraccumulator.

SetJniIdentityHashCode(Int32)

Establezca el valor devuelto por JniIdentityHashCode.

(Heredado de IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

Una operación de reducción mutable que acumula elementos de entrada en un contenedor de resultados mutable, lo que opcionalmente transforma el resultado acumulado en una representación final una vez procesados todos los elementos de entrada.

(Heredado de IJavaPeerable)
SetPeerReference(JniObjectReference)

Establezca el valor devuelto por PeerReference.

(Heredado de IJavaPeerable)
Supplier()

Función que crea y devuelve un nuevo contenedor de resultados mutable.

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)

Una operación de reducción mutable que acumula elementos de entrada en un contenedor de resultados mutable, lo que opcionalmente transforma el resultado acumulado en una representación final una vez procesados todos los elementos de entrada.

GetJniTypeName(IJavaPeerable)

Una operación de reducción mutable que acumula elementos de entrada en un contenedor de resultados mutable, lo que opcionalmente transforma el resultado acumulado en una representación final una vez procesados todos los elementos de entrada.

Se aplica a