Comment convertir un Iterator en Iterable en Java ?
Il existe différentes manières de convertir un Iterator en Iterable,
- Surcharger une méthode abstraite iterator()
- Expression Lambda en Java 8
- En utilisant des séparateurs
1) Surcharger une méthode abstraite iterator()
Nous verrons dans différentes étapes comment surcharger une méthode abstraite iterator(),
- Nous obtiendrons l'objet Iterator en utilisant iterator() méthode de collecte.
- Nous obtiendrons l'objet Iterable en remplaçant un iterator() méthode.
- Nous allons définir une autre méthode et dans cette méthode, nous passerons l'objet Iterator et remplacerons iterator() méthode puis renvoie l'objet Iterator.
Exemple :
// Java program to demonstrate the example of overriding // an abstract method iterator() to convert Iterator into Iterable import java.util.*; public class ConvertIteratorToIterable { // This is a user defined method to convert Iterator into Iterable public static Iterable convertIterableFromIterator(Iterator iterator) { return new Iterable() { // Overriding an abstract method iterator() public Iterator iterator() { return iterator; } }; } public static void main(String[] args) { // Instantiating Iterator Object Iterator iterate = Arrays.asList(10, 20, 30, 40).iterator(); // Now, we will get the Iterable from Iterator Iterable iterable = convertIterableFromIterator(iterate); // Display converted Iterable elements iterable.forEach(System.out::println); } }
Sortie
10 20 30 40
2) Expression lambda en Java 8
Nous allons voir en différentes étapes et les étapes sont données ci-dessous :
- Dans la première étape, obtenez l'itérateur.
- Dans la deuxième étape, nous convertirons Iterator en Iterable sans remplacer une méthode abstraite iterator() .
- Dans la troisième étape, nous renverrons Iterable à partir de la méthode convertIteratorToIterable() et passé l'objet Iterator et obtenir Iterable.
Exemple :
// Java program to demonstrate the example of // Lambda expression in Java 8 to convert Iterator into Iterable import java.util.*; public class ConvertIteratorToIterable { // This is a user defined method to convert Iterator into Iterable public static Iterable convertIterableFromIterator(Iterator iterator) { return () -> iterator; } public static void main(String[] args) { // Instantiating Iterator Object Iterator iterate = Arrays.asList(10, 20, 30, 40).iterator(); // Now, we will get the Iterable from Iterator Iterable iterable = convertIterableFromIterator(iterate); // Display converted Iterable elements iterable.forEach(System.out::println); } }
Sortie
10 20 30 40
3) En utilisant des séparateurs
Nous allons voir en quelques étapes et les étapes sont données ci-dessous :
- Pour obtenir l'Iterator et convertir l'Iterator en Spliterator en utilisant Spliterators.spliteratorUnknownSize() méthode et en utilisant cette méthode, nous prendrons l'objet itérateur, la taille, une valeur booléenne.
- Maintenant, nos données sont prêtes dans Spliterator et nous allons à nouveau convertir Spliterator en Stream en utilisant la méthode stream() .
- Maintenant, nos données sont prêtes dans Stream et nous allons à nouveau convertir Stream en Iterable en utilisant la méthode collect() .
- Enfin, nous allons retourner l'Iterable.
Exemple :
// Java program to demonstrate the example of Spliterators to // convert an Iterator into Iterable import java.util.*; import java.util.stream.*; public class ConvertIteratorToIterable { // This is a user defined method to convert Iterator into Iterable public static < T > Iterable < T > convertIterableFromIterator(Iterator < T > iterator) { return StreamSupport.stream(Spliterators.spliteratorUnknownSize(iterator, 0), false).collect(Collectors.toList()); } public static void main(String[] args) { // Instantiating Iterator Object Iterator < Double > iterate = Arrays.asList(10.0, 20.0, 30.0, 40.0).iterator(); // Now, we will get the Iterable from Iterator Iterable < Double > iterable = convertIterableFromIterator(iterate); // Display converted Iterable elements iterable.forEach(System.out::println); } }
Sortie
10.0 20.0 30.0 40.0