java spliterator é um dos quatro iteradores – enumeração, iterator, listiterator e spliterator.
java spliterator
assim como iterator e listiterator, spliterator é um iterator em java, usado para iterar elementos um por um de um objeto implementado como list. alguns pontos importantes sobre java spliterator são:
- java spliterator é uma interface na api de java collection.
- spliterator foi introduzido na versão java 8 na biblioteca
java.util
. - ele suporta funcionalidades de programação paralela.
- podemos usá-lo tanto para classes da api de coleções quanto para classes da api de stream.
- fornece características sobre objetos da coleção ou api.
- não podemos usar este iterator para classes implementadas como map.
- Ele usa o método
tryAdvance()
para iterar elementos individualmente em vários Threads para suportar o Processamento Paralelo. - Ele usa o método
forEachRemaining()
para iterar elementos sequencialmente em um único Thread. - Ele usa o método
trySplit()
para dividir a si mesmo em Sub-Spliterators para suportar o Processamento Paralelo. - O Spliterator suporta tanto o processamento Sequencial quanto o Paralelo dos dados.
O Spliterator em si não fornece o comportamento de programação paralela. No entanto, ele fornece alguns métodos para suportá-lo. Os desenvolvedores devem utilizar os métodos da interface Spliterator e implementar a programação paralela usando o Framework Fork/Join (uma boa abordagem).
Principais Funcionalidades do Spliterator
- Dividir os dados de origem.
- Processar os dados de origem.
Diagrama de Classe do Spliterator Java
O diagrama a seguir mostra o Diagrama de Classe da interface Spliterator Java. Ele possui muitos campos e métodos.
Métodos do Spliterator Java
Nesta seção, listaremos todos os métodos do Java Spliterator um por um, com alguma descrição útil.
-
– **int characteristics():** Retorna um conjunto de características deste Spliterator e de seus elementos.
-
– **long estimateSize():** Retorna uma estimativa do número de elementos que seriam encontrados por uma travessia forEachRemaining(), ou retorna Long.MAX_VALUE se for infinito, desconhecido ou muito caro para calcular.
-
– **default void forEachRemaining(Consumer action):** Executa a ação fornecida para cada elemento restante, sequencialmente na thread atual, até que todos os elementos tenham sido processados ou a ação lance uma exceção.
-
– **default Comparator getComparator():** Se a fonte deste Spliterator estiver ORDENADA por um comparador, retorna esse comparador.
-
– **default long getExactSizeIfKnown():** Método de conveniência que retorna estimateSize() se este Spliterator for de TAMANHO conhecido, caso contrário, retorna -1.
-
– **default boolean hasCharacteristics(int characteristics):** Retorna true se as características() deste Spliterator contiverem todas as características fornecidas.
-
– **boolean tryAdvance(Consumer action):** Se um elemento restante existir, executa a ação fornecida nele, retornando true; caso contrário, retorna false.
-
– **Spliterator trySplit():** Se este spliterator puder ser particionado, retorna um Spliterator cobrindo elementos que, após o retorno deste método, não serão cobertos por este Spliterator.
Exemplo de Java Spliterator
Nesta seção, discutiremos como criar um objeto Java Spliterator usando spliterator() e desenvolveremos um exemplo simples.
import java.util.Spliterator;
import java.util.ArrayList;
import java.util.List;
public class SpliteratorSequentialIteration
{
public static void main(String[] args)
{
List names = new ArrayList<>();
names.add("Rams");
names.add("Posa");
names.add("Chinni");
// Obtendo o Spliterator
Spliterator namesSpliterator = names.spliterator();
// Percorrendo elementos
namesSpliterator.forEachRemaining(System.out::println);
}
}
Saída: –
Rams
Posa
Chinni
Se observarmos o programa acima e a saída, podemos entender facilmente que este método Spliterator.forEachRemaining() funciona da mesma maneira que ArrayList.foreach(). Sim, ambos funcionam de maneira semelhante.
Vantagens do Spliterator
- Ao contrário do Iterator e ListIterator, ele suporta funcionalidades de Programação Paralela.
- Ao contrário do Iterator e ListIterator, ele suporta tanto o Processamento Sequencial quanto o Paralelo de dados.
- Comparado a outros Iteradores, ele fornece melhor desempenho.
Iterator vs Spliterator
Iterator | Spliterator |
---|---|
Introduced in Java 1.2. | Introduced in Java 1.8. |
It is an Iterator for whole Collection API. | It is an Iterator for both Collection and Stream API, except Map implemented classes. |
It is an Universal Iterator. | It is NOT an Universal Iterator. |
It does NOT support Parallel Programming. | It supports Parallel Programming. |
Isso é tudo sobre o Spliterator em Java. Referência: Documento da API
Source:
https://www.digitalocean.com/community/tutorials/java-spliterator