ISpliterator Interface
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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 DISTINCT
e 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 long
e 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 |
ExactSizeIfKnown |
Método de conveniência que retorna |
Handle |
Obtém o valor JNI do objeto Android subjacente. (Herdado de IJavaObject) |
JniIdentityHashCode |
Retorna o valor de |
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 |
EstimateSize() |
Retorna uma estimativa do número de elementos que seriam encontrados por uma |
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 |
SetJniIdentityHashCode(Int32) |
Defina o valor retornado por |
SetJniManagedPeerState(JniManagedPeerStates) |
Um objeto para atravessar e particionar elementos de uma origem. (Herdado de IJavaPeerable) |
SetPeerReference(JniObjectReference) |
Defina o valor retornado por |
TryAdvance(IConsumer) |
Se existir um elemento restante, executa a ação dada nele, retornando |
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. |