Compartilhar via


ICollector Interface

Definição

Uma operação de redução mutável que acumula elementos de entrada em um contêiner de resultado mutável, opcionalmente transformando o resultado acumulado em uma representação final depois que todos os elementos de entrada tiverem sido processados.

[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
Implementações

Comentários

Uma operação de redução mutável que acumula elementos de entrada em um contêiner de resultado mutável, opcionalmente transformando o resultado acumulado em uma representação final depois que todos os elementos de entrada tiverem sido processados. As operações de redução podem ser realizadas sequencialmente ou em paralelo.

Exemplos de operações de redução mutáveis incluem: acumular elementos em um Collection, concatenar cadeias de caracteres usando um StringBuilder, calcular informações resumidas sobre elementos como soma, min, max ou média, calcular resumos de "tabela dinâmica", como "transação de valor máximo por vendedor", etc. A classe Collectors fornece implementações de muitas reduções mutáveis comuns.

A Collector é especificado por quatro funções que trabalham juntas para acumular entradas em um contêiner de resultados mutável e, opcionalmente, executar uma transformação final no resultado. São eles: <ul><li>criação de um novo contêiner de resultado (#supplier())</li><li>incorporando um novo elemento de dados em um contêiner de resultado (#accumulator())</li<>li>combinando dois contêineres de resultado em um (#combiner())</li><li>executando uma transformação final opcional no contêiner (#finisher())</li></ul>

Os coletores também possuem um conjunto de características, como Characteristics#CONCURRENT, que fornecem dicas que podem ser usadas por uma implementação de redução para proporcionar melhor desempenho.

Uma implementação sequencial de uma redução usando um coletor criaria um único contêiner de resultado usando a função de fornecedor e invocaria a função de acumulador uma vez para cada elemento de entrada. Uma implementação paralela particionaria a entrada, criaria um contêiner de resultados para cada partição, acumularia o conteúdo de cada partição em um subresultado para essa partição e, em seguida, usaria a função combinador para mesclar os subresultados em um resultado combinado.

Para garantir que execuções sequenciais e paralelas produzam resultados equivalentes, as funções do coletor devem satisfazer uma <identidade< em>/em> e uma restrição de associatividade.

A restrição de identidade diz que, para qualquer resultado parcialmente acumulado, combiná-lo com um recipiente de resultado vazio deve produzir um resultado equivalente. Ou seja, para um resultado a parcialmente acumulado que é o resultado de qualquer série de invocações de acumulador e combinador, a deve ser equivalente a combiner.apply(a, supplier.get()).

A restrição de associatividade diz que dividir a computação deve produzir um resultado equivalente. Ou seja, para quaisquer elementos t1 de entrada e t2, os resultados r1 e r2 no cálculo abaixo devem 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 coletores que não possuem a UNORDERED característica, dois resultados a1 acumulados e a2 equivalem se finisher.apply(a1).equals(finisher.apply(a2)). Para colecionadores não ordenados, a equivalência é relaxada para permitir a não igualdade relacionada às diferenças de ordem. (Por exemplo, um coletor não ordenado que acumulou elementos para um List consideraria duas listas equivalentes se elas contivessem os mesmos elementos, ignorando a ordem.)

As bibliotecas que implementam a redução com base no Collector, como Stream#collect(Collector), devem aderir às seguintes restrições: <ul<>li>O primeiro argumento passado para a função acumulador, ambos os argumentos passados para a função combinador e o argumento passado para a função finisher devem ser o resultado de uma invocação anterior das funções fornecedor, acumulador ou combinador de resultados.</li><li>A implementação não deve fazer nada com o resultado de qualquer das funções de fornecedor, acumulador ou combinador de resultados a não ser passá-las novamente para as funções de acumulador, combinador ou finalizador, ou devolvê-las ao chamador da operação de redução.</li><li Se>um resultado for passado para a função combinador ou finalizador e o mesmo objeto não for retornado dessa função, ele nunca será usado novamente.</li><li Uma>vez que um resultado é passado para a função combinador ou finalizador, ele nunca mais é passado para a função acumulador.</li><li>Para coletores não simultâneos, qualquer resultado retornado das funções de fornecedor, acumulador ou combinador de resultados deve ser confinado em série por rosca. Isso permite que a coleta ocorra em paralelo sem a Collector necessidade de implementar qualquer sincronização adicional. A implementação de redução deve gerenciar que a entrada seja particionada corretamente, que as partições sejam processadas isoladamente e a combinação aconteça somente após a conclusão do acúmulo.</li><li>Para coletores simultâneos, uma implementação é livre para (mas não é necessária para) implementar a redução simultaneamente. Uma redução simultânea é aquela em que a função do acumulador é chamada simultaneamente de vários threads, usando o mesmo contêiner de resultado simultaneamente modificável, em vez de manter o resultado isolado durante a acumulação. Uma redução simultânea só deve ser aplicada se o coletor tiver as Characteristics#UNORDERED características ou se os dados de origem não forem ordenados.</li></ul>

Além das implementações predefinidas no Collectors, os métodos #of(Supplier, BiConsumer, BinaryOperator, Characteristics...) de fábrica estáticos podem ser usados para construir coletores. Por exemplo, você pode criar um coletor que acumule widgets em um TreeSet com:

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

(Esse comportamento também é implementado pelo coletor Collectors#toCollection(Supplier)predefinido ).

Adicionado em 1.8.

Documentação Java para java.util.stream.Collector.

Partes desta página são modificações baseadas no trabalho criado e compartilhado pelo Android Open Source Project e usado de acordo com os termos descritos na Creative Commons 2.5 Attribution License.

Propriedades

Handle

Obtém o valor JNI do objeto Android subjacente.

(Herdado de IJavaObject)
JniIdentityHashCode

Retorna o valor de java.lang.System.identityHashCode() para a instância encapsulada.

(Herdado de IJavaPeerable)
JniManagedPeerState

Estado do par gerenciado.

(Herdado de IJavaPeerable)
JniPeerMembers

Acesso de membros e suporte à invocação.

(Herdado de IJavaPeerable)
PeerReference

Retorna uma JniObjectReference das instâncias do objeto Java encapsulado.

(Herdado de IJavaPeerable)

Métodos

Accumulator()

Uma função que dobra um valor em um contêiner de resultado mutável.

Characteristics()

Retorna um Set de Collector.Characteristics indicando as características deste coletor.

Combiner()

Uma função que aceita dois resultados parciais e os mescla.

Disposed()

Chamado quando a instância tiver sido descartada.

(Herdado de IJavaPeerable)
DisposeUnlessReferenced()

Se não houver referências pendentes a este caso, então chame Dispose(), caso contrário, não faz nada.

(Herdado de IJavaPeerable)
Finalized()

Chamado quando a instância tiver sido finalizada.

(Herdado de IJavaPeerable)
Finisher()

Realizar a transformação final do tipo A de acumulação intermediário para o tipo Rde resultado final.

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

Retorna um novo Collector descrito pelas funções , accumulator, combinere finisher fornecidassupplier.

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

Retorna um novo Collector descrito pelas funções , accumulator, combinere finisher fornecidassupplier.

SetJniIdentityHashCode(Int32)

Defina o valor retornado por JniIdentityHashCode.

(Herdado de IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

Uma operação de redução mutável que acumula elementos de entrada em um contêiner de resultado mutável, opcionalmente transformando o resultado acumulado em uma representação final depois que todos os elementos de entrada tiverem sido processados.

(Herdado de IJavaPeerable)
SetPeerReference(JniObjectReference)

Defina o valor retornado por PeerReference.

(Herdado de IJavaPeerable)
Supplier()

Uma função que cria e retorna um novo contêiner de resultados mutável.

UnregisterFromRuntime()

Cancele o registro dessa instância para que o tempo de execução não a retorne de chamadas futuras Java.Interop.JniRuntime+JniValueManager.PeekValue .

(Herdado de IJavaPeerable)

Métodos de Extensão

JavaCast<TResult>(IJavaObject)

Executa uma conversão de tipo verificada em tempo de execução do Android.

JavaCast<TResult>(IJavaObject)

Uma operação de redução mutável que acumula elementos de entrada em um contêiner de resultado mutável, opcionalmente transformando o resultado acumulado em uma representação final depois que todos os elementos de entrada tiverem sido processados.

GetJniTypeName(IJavaPeerable)

Uma operação de redução mutável que acumula elementos de entrada em um contêiner de resultado mutável, opcionalmente transformando o resultado acumulado em uma representação final depois que todos os elementos de entrada tiverem sido processados.

Aplica-se a