Java >> Tutorial de Java >  >> Java

Separador Java 8

Enumeración, Iterador y ListIterator:hasta Java 7, estos tres iteradores están disponibles en Java. A partir de Java 8, Spliterator se agrega a este grupo de iteradores. Como sugiere el propio nombre, Spliterator realiza particiones además de iteraciones. Es más adecuado para la programación en paralelo. Con iteradores antiguos, puede iterar solo tipos de colección. Pero, Spliterator se puede usar para iterar colecciones, matrices y flujos. Veamos Java 8 Spliterator en detalle.

Introducción a Java 8 Spliterator:

Veamos algunos puntos introductorios importantes sobre Java 8 Spliterator.

  1. Spliterator es una interfaz introducida desde Java 8 como miembro de java.util paquete.
  2. Como sugiere el propio nombre, se puede usar tanto para particionar como para iterar.
  3. La fuente de Spliterator puede ser una matriz, una colección, un flujo o un canal de E/S.
  4. Se puede usar para recorrer los elementos uno por uno (tryAdvance() método) o en masa (forEachRemaining() método).
  5. Es más adecuado para la programación en paralelo.
  6. Spliterator puede proporcionarle el tamaño exacto o al menos un tamaño estimado de la fuente. Eso no es posible con otros iteradores.
  7. Los divisores son resistentes a los fallos por naturaleza. es decir, arrojan una excepción si la fuente se modifica después de la creación de Spliterator.
  8. Hasta Spliterator , Puede extraer algunas características de elementos iterativos como ORDENADO, DISTINTO, INMUTABLE, CONCURRENTE, NO NULL, SIZED, SORTED, SUBSIZED.
  9. A continuación se muestra la lista de características y métodos disponibles en Spliterator .

Trabajar con Java 8 Spliterator:

1) spliterator() :Este método se agrega a java.lang.Iterable interfaz de Java 8 como método predeterminado. Por lo tanto, está disponible en todas las clases y subinterfaces que implementan o amplían esta interfaz. Se usa para obtener Spliterator sobre los elementos de arreglos o colecciones o flujos.

//Spliterator from an array
		
String[] languageArray = new String[] {"Java", "C", "C++", "Python", "Scala", "Kotlin"};
Spliterator<String> spliteratorOfArray = Arrays.spliterator(languageArray);
		
//Spliterator from a List
		
List<String> languageList = Arrays.asList("Java", "C", "C++", "Python", "Scala", "Kotlin");
Spliterator<String> spliteratorOfList = languageList.spliterator();
		
//Spliterator from a Stream
		
Stream<String> languageStream = Stream.of("Java", "C", "C++", "Python", "Scala", "Kotlin");
Spliterator<String> spliteratorOfStream = languageStream.spliterator();

2) tryAdvance() :Realiza la acción dada en el siguiente elemento. Se utiliza para recorrer los elementos uno por uno.

List<String> languageList = Arrays.asList("Java", "C", "C++", "Python", "Scala", "Kotlin");
Spliterator<String> languageSpliterator = languageList.spliterator();
languageSpliterator.tryAdvance(System.out::println);
languageSpliterator.tryAdvance(System.out::println);
		
//		Output : 
//		Java
//		C

3) forEachRemaining() :Realiza la acción dada en cada uno de los elementos restantes. Se utiliza para atravesar los elementos de forma masiva.

List<String> languageList = Arrays.asList("Java", "C", "C++", "Python", "Scala", "Kotlin");
Spliterator<String> languageSpliterator = languageList.spliterator();
languageSpliterator.tryAdvance(System.out::println);
languageSpliterator.tryAdvance(System.out::println);
languageSpliterator.forEachRemaining(System.out::println);
		
//		Output : 
//		Java
//		C
//		C++
//		Python
//		Scala
//		Kotlin

4) trySplit() :Este método divide el Spliterator actual en otro Spliterator. Es útil en la programación paralela.

List<String> languageList = Arrays.asList("Java", "C", "C++", "Python", "Scala", "Kotlin");
Spliterator<String> languageSpliterator = languageList.spliterator();
Spliterator<String> anotherLanguageSpliterator = languageSpliterator.trySplit();

System.out.println("From 1st Spliterator");
System.out.println("------------------");
languageSpliterator.forEachRemaining(System.out::println);
		
System.out.println("------------------");
		
System.out.println("From 2nd Spliterator");
System.out.println("------------------");
anotherLanguageSpliterator.forEachRemaining(System.out::println);
				
//		From 1st Spliterator
//		------------------
//		Python
//		Scala
//		Kotlin
//		------------------
//		From 2nd Spliterator
//		------------------
//		Java
//		C
//		C++

5) estimateSize() :Devuelve la estimación del número de elementos aún por recorrer por el Spliterator .

List<String> languageList = Arrays.asList("Java", "C", "C++", "Python", "Scala", "Kotlin");
Spliterator<String> languageSpliterator = languageList.spliterator();
System.out.println(languageSpliterator.estimateSize());       //Output : 6
languageSpliterator.tryAdvance(System.out::println);
System.out.println(languageSpliterator.estimateSize());       //Output : 5

6) getExactSizeIfKnown() :Devuelve el tamaño exacto si se conoce, de lo contrario devuelve -1.

List<String> languageList = Arrays.asList("Java", "C", "C++", "Python", "Scala", "Kotlin");
Spliterator<String> languageSpliterator = languageList.spliterator();
System.out.println(languageSpliterator.getExactSizeIfKnown());       //Output : 6
languageSpliterator.tryAdvance(System.out::println);
System.out.println(languageSpliterator.getExactSizeIfKnown());       //Output : 5

7) characteristics() :Devuelve un conjunto de características de los elementos en forma de número entero.

List<String> languageList = Arrays.asList("Java", "C", "C++", "Python", "Scala", "Kotlin");
Spliterator<String> languageSpliterator = languageList.spliterator();
System.out.println(languageSpliterator.characteristics());
		
//Output : 16464

8) hasCharacteristics() :Comprueba si este Spliterator tiene características específicas o no.

List<String> languageList = Arrays.asList("Java", "C", "C++", "Python", "Scala", "Kotlin");
Spliterator<String> languageSpliterator = languageList.spliterator();
System.out.println(languageSpliterator.hasCharacteristics(16464));
		
//Output : true

9) getComparator() :Devuelve Comparator de la fuente si está ordenado, de lo contrario arroja IllegalStateException . Si la fuente se ordena en orden natural, devuelve nulo.

List<String> languageList = Arrays.asList("Java", "C", "C++", "Python", "Scala", "Kotlin");
Spliterator<String> languageSpliterator = languageList.spliterator();
System.out.println(languageSpliterator.getComparator());
		
//Output : Exception in thread "main" java.lang.IllegalStateException

Lea también:

  • Java 8 Spliterator JavaDoc
  • Flujos de Java 8
  • Expresiones lambda de Java 8
  • Interfaces funcionales de Java 8
  • Coleccionistas de Java 8
  • Java 8 StringJoiner
  • Referencias de métodos de Java 8
  • Cambios en la interfaz de Java 8
  • Clase opcional de Java 8

Etiqueta Java