Compartilhar via


ISpliterator Interface

Definição

Um objeto para atravessar e particionar elementos de uma origem.

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

Comentários

Um objeto para atravessar e particionar elementos de uma origem. A fonte de elementos cobertos por um Spliterator pode ser, por exemplo, uma matriz, um Collection, um canal de E/S ou uma função geradora.

Um Spliterator pode atravessar elementos individualmente (#tryAdvance tryAdvance()) ou sequencialmente em massa (#forEachRemaining forEachRemaining()).

Um Spliterator também pode particionar alguns de seus elementos (usando #trySplit) como outro Spliterator, para ser usado em operações possivelmente paralelas. As operações que usam um Spliterator que não pode dividir, ou o fazem de maneira altamente desequilibrada ou ineficiente, provavelmente não se beneficiarão do paralelismo. Elementos de escape transversais e de divisão; cada Spliterator é útil para apenas um único cálculo em massa.

Um Spliterator também relata um conjunto de #characteristics() sua estrutura, fonte e elementos entre #ORDERED, #DISTINCT, #SORTED, , #SIZED, #NONNULL, #IMMUTABLE, e #CONCURRENT#SUBSIZED. Estes podem ser empregados por clientes Spliterator para controlar, especializar ou simplificar a computação. Por exemplo, um Spliterator para um Collection relatório SIZED, um Spliterator para um Set relatório DISTINCTe um Spliterator para um SortedSet também relataria SORTED. As características são relatadas como um conjunto de bits unido simples.

Algumas características restringem adicionalmente o comportamento do método; por exemplo, se ORDERED, os métodos de travessia devem estar em conformidade com sua ordenação documentada. Novas características podem ser definidas no futuro, portanto, os implementadores não devem atribuir significados a valores não listados.

"binding">Um Spliterator que não reporta <c>IMMUTABLE</c> ou <c>CONCURRENT</c> deve ter uma política documentada sobre: quando o spliterator <em>se liga</em> à fonte do elemento; e detecção de interferência estrutural da fonte do elemento detectada após a ligação. Um <Spliterator em>late-binding</em> se liga à origem dos elementos no ponto de primeira travessia, primeira divisão ou primeira consulta para tamanho estimado, em vez de no momento em que o Spliterator é criado. Um Spliterator que não <é em>late-binding</em> liga-se à fonte de elementos no ponto de construção ou primeira invocação de qualquer método. As modificações feitas na fonte antes da vinculação são refletidas quando o Spliterator é atravessado. Depois de ligar um Spliterator deve, em uma base de melhor esforço, lançar ConcurrentModificationException se a interferência estrutural for detectada. Os espoliteradores que fazem isso são chamados <de fail-fast></em>. O método de travessia em massa (#forEachRemaining forEachRemaining()) de um Spliterator pode otimizar a travessia e verificar se há interferência estrutural depois que todos os elementos foram percorridos, em vez de verificar por elemento e falhar imediatamente.

Os espoliteradores podem fornecer uma estimativa do número de elementos restantes através do #estimateSize método. Idealmente, como refletido na característica #SIZED, esse valor corresponde exatamente ao número de elementos que seriam encontrados em uma travessia bem-sucedida. No entanto, mesmo quando não é exatamente conhecido, um valor estimado ainda pode ser útil para operações que estão sendo executadas na fonte, como ajudar a determinar se é preferível dividir mais ou atravessar os elementos restantes sequencialmente.

Apesar de sua utilidade óbvia em algoritmos paralelos, não se espera que os divisores sejam thread-safe; em vez disso, implementações de algoritmos paralelos usando divisores devem garantir que o divisor seja usado apenas por um thread de cada vez. Isso geralmente é fácil de obter via <em>serial thread-confinement</em>, que muitas vezes é uma consequência natural de algoritmos paralelos típicos que funcionam por decomposição recursiva. Uma chamada #trySplit() de thread pode entregar o Spliterator retornado para outro thread, que por sua vez pode atravessar ou dividir ainda mais esse Spliterator. O comportamento da divisão e da travessia é indefinido se duas ou mais roscas operarem simultaneamente no mesmo divisor. Se a rosca original entregar um divisor a outro fio para processamento, é melhor que essa transferência ocorra antes que qualquer elemento seja consumido com #tryAdvance(Consumer) tryAdvance(), pois certas garantias (como a precisão dos spliterators) só são válidas antes do início da #estimateSize()SIZED travessia.

As especializações de subtipo primitivo de Spliterator são fornecidas para OfInt int, OfLong longe OfDouble double valores. As implementações padrão do subtipo e valores primitivos de Spliterator#tryAdvance(java.util.function.Consumer) caixa para Spliterator#forEachRemaining(java.util.function.Consumer) instâncias de sua classe wrapper correspondente. Tal boxe pode minar quaisquer vantagens de desempenho obtidas com o uso das especializações primitivas. Para evitar o boxe, os métodos primitivos correspondentes devem ser usados. Por exemplo, Spliterator.OfInt#tryAdvance(java.util.function.IntConsumer) e Spliterator.OfInt#forEachRemaining(java.util.function.IntConsumer) deve ser usado em preferência a Spliterator.OfInt#tryAdvance(java.util.function.Consumer) e Spliterator.OfInt#forEachRemaining(java.util.function.Consumer). Travessia de valores primitivos usando métodos #tryAdvance tryAdvance() baseados em boxe e #forEachRemaining(java.util.function.Consumer) forEachRemaining() não afeta a ordem em que os valores, transformados em valores encaixotados, são encontrados.

Adicionado em 1.8.

Documentação Java para java.util.Spliterator.

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

Comparator

Se a fonte deste Spliterator for #SORTED por um Comparator, retorna que Comparator.

ExactSizeIfKnown

Método de conveniência que retorna #estimateSize() se este Spliterator for #SIZED, senão -1.

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

Characteristics()

Retorna um conjunto de características deste Spliterator e seus elementos.

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

Retorna uma estimativa do número de elementos que seriam encontrados por uma #forEachRemaining travessia ou retorna Long#MAX_VALUE se infinito, desconhecido ou muito caro para computar.

Finalized()

Chamado quando a instância tiver sido finalizada.

(Herdado de IJavaPeerable)
ForEachRemaining(IConsumer)

Executa a ação fornecida para cada elemento restante, sequencialmente no thread atual, até que todos os elementos tenham sido processados ou a ação lance uma exceção.

HasCharacteristics(Int32)

Retorna true se esse Spliterator #characteristics contiver todas as características fornecidas.

SetJniIdentityHashCode(Int32)

Defina o valor retornado por JniIdentityHashCode.

(Herdado de IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

Um objeto para atravessar e particionar elementos de uma origem.

(Herdado de IJavaPeerable)
SetPeerReference(JniObjectReference)

Defina o valor retornado por PeerReference.

(Herdado de IJavaPeerable)
TryAdvance(IConsumer)

Se existir um elemento restante, executa a ação dada nele, retornando true; caso contrário, retorna false.

TrySplit()

Se este divisor puder ser particionado, retornará um Spliterator cobrindo elementos, que, ao retornar deste método, não serão cobertos por este Spliterator.

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)

Um objeto para atravessar e particionar elementos de uma origem.

GetJniTypeName(IJavaPeerable)

Um objeto para atravessar e particionar elementos de uma origem.

Aplica-se a