Dado un Iterador, la tarea es convertirlo en Iterables en Java.
Ejemplos:
Input: Iterator = {1, 2, 3, 4, 5} Output: {1, 2, 3, 4, 5} Input: Iterator = {'G', 'e', 'e', 'k', 's'} Output: {'G', 'e', 'e', 'k', 's'}
A continuación se muestran las diversas formas de hacerlo:
- Al anular el método abstracto Iterable.iterator() :
- Obtenga el iterador.
- Anule el método Iterable.iterator() y obtenga iterable.
- Devuelve el Iterable.
A continuación se muestra la implementación del enfoque anterior:
// Java program to get a Iterable
// from a given Iterator
import
java.util.*;
class
GFG {
// Function to get the Spliterator
public
static
<T> Iterable<T>
getIterableFromIterator(Iterator<T> iterator)
{
return
new
Iterable<T>() {
@Override
public
Iterator<T> iterator()
{
return
iterator;
}
};
}
// Driver code
public
static
void
main(String[] args)
{
// Get the Iterator
Iterator<Integer>
iterator = Arrays.asList(
1
,
2
,
3
,
4
,
5
)
.iterator();
// Get the Iterable from the Iterator
Iterable<Integer>
iterable = getIterableFromIterator(iterator);
// Print the elements of Iterable
iterable.forEach(System.out::println);
}
}
Producción:1 2 3 4 5
- Usando la expresión lambda de Java 8 :
- Obtenga el iterador.
- Convierta el iterador en iterable mediante Lambda Expression.
- Devuelve el Iterable.
A continuación se muestra la implementación del enfoque anterior:
// Java program to get an Iterable
// from a given Iterator
import
java.util.*;
class
GFG {
// Function to get the Spliterator
public
static
<T> Iterable<T>
getIterableFromIterator(Iterator<T> iterator)
{
return
() -> iterator;
}
// Driver code
public
static
void
main(String[] args)
{
// Get the Iterator
Iterator<Integer>
iterator = Arrays.asList(
1
,
2
,
3
,
4
,
5
)
.iterator();
// Get the Iterable from the Iterator
Iterable<Integer>
iterable = getIterableFromIterator(iterator);
// Print the elements of Iterable
iterable.forEach(System.out::println);
}
}
Producción:1 2 3 4 5
- Uso de divisores :
- Obtenga el iterador.
- Convierta el iterador en Spliterator utilizando el método Spliterators.spliteratorUnknownSize().
- Convierta Spliterator en Sequential Stream utilizando el método StreamSupport.stream().
- Recopile los elementos de Sequential Stream como Iterable usando el método collect().
- Devuelve el Iterable.
A continuación se muestra la implementación del enfoque anterior:
// Java program to get a Iterable
// from a given Iterator
import
java.util.*;
import
java.util.stream.Collectors;
import
java.util.stream.StreamSupport;
class
GFG {
// Function to get the Spliterator
public
static
<T> Iterable<T>
getIterableFromIterator(Iterator<T> iterator)
{
return
StreamSupport
// Convert the iterator into a Spliterator
// and then into a sequential stream
.stream(Spliterators.spliteratorUnknownSize(iterator,
0
),
false
)
// Convert the stream to an iterable
.collect(Collectors.toList());
}
// Driver code
public
static
void
main(String[] args)
{
// Get the Iterator
Iterator<Integer>
iterator = Arrays.asList(
1
,
2
,
3
,
4
,
5
)
.iterator();
// Get the Iterable from the Iterator
Iterable<Integer>
iterable = getIterableFromIterator(iterator);
// Print the elements of Iterable
iterable.forEach(System.out::println);
}
}
Producción:1 2 3 4 5
Publicación traducida automáticamente
Artículo escrito por RishabhPrabhu y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA