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 después de procesar 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 después de procesar todos los elementos de entrada. Las operaciones de reducción se pueden realizar secuencialmente o en paralelo.

Algunos ejemplos de operaciones de reducción mutable incluyen: acumular elementos en un Collection; concatenar cadenas mediante un StringBuilder; información de resumen informático sobre elementos como sum, min, max o average; computación de 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.

Se Collector 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 combinando dos contenedores de resultados en una (#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 subresultado para esa partición y, a continuación, usaría la función de combinador para combinar los subresults en un resultado combinado.

Para asegurarse de que las ejecuciones secuenciales y paralelas generan resultados equivalentes, las funciones del recopilador deben satisfacer una <>identidad</em> y una restricción 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 producir 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)). En el caso de los recopiladores desordenados, la equivalencia se relaja para permitir la no igualdad relacionada con las diferencias en orden. (Por ejemplo, un recopilador desordenado que acumulaba elementos en un List elemento 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 restricciones siguientes: <ul><li>El primer argumento pasado a la función de acumulador, ambos argumentos pasados a la función de combinador y el argumento pasado a la función de finalizador debe ser el resultado de una invocación anterior de las funciones del proveedor, acumulador o combinador de resultados.</li><li>La implementación no debe hacer nada con el resultado de ninguna de las funciones de proveedor, acumulador o combinador resultantes 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 del 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 una vez completada la acumulación.</li li><>Para los 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, usando 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 se implementa mediante el recopilador Collectors#toCollection(Supplier)predefinido).

Se agregó 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 y se usan según los términos descritos en la 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 a 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 Collector.Characteristics que indica las características de este recopilador.

Combiner()

Función que acepta dos resultados parciales y los 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 intermedia al tipo Rde resultado final.

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

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

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

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

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 después de procesar 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 Java.Interop.JniRuntime+JniValueManager.PeekValue futuras invocaciones.

(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 después de procesar 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 después de procesar todos los elementos de entrada.

Se aplica a