Given an Iterator, the task is to convert it into List in Java.
Examples:
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'}
Below are the various ways to do so:
- Naive Approach:
- Get the Iterator.
- Create an empty list.
- Add each element of the iterator to the list using forEachRemaining() method.
- Return the list.
Below is the implementation of the above approach:
// Java program to get a List
// from a given Iterator
import
java.util.*;
class
GFG {
// Function to get the List
public
static
<T> List<T>
getListFromIterator(Iterator<T> iterator)
{
// Create an empty list
List<T> list =
new
ArrayList<>();
// Add each element of iterator to the List
iterator.forEachRemaining(list::add);
// Return the List
return
list;
}
// Driver code
public
static
void
main(String[] args)
{
// Get the Iterator
Iterator<Integer>
iterator = Arrays.asList(
1
,
2
,
3
,
4
,
5
)
.iterator();
// Get the List from the Iterator
List<Integer>
list = getListFromIterator(iterator);
// Print the list
System.out.println(list);
}
}
Output:[1, 2, 3, 4, 5]
- Using Iterable as intermediate:
- Get the Iterator.
- Convert the iterator to iterable using lambda expression.
- Convert the iterable to list using Stream.
- Return the list.
Below is the implementation of the above approach:
// Java program to get a List
// from a given Iterator
import
java.util.*;
import
java.util.stream.Collectors;
import
java.util.stream.StreamSupport;
class
GFG {
// Function to get the List
public
static
<T> List<T>
getListFromIterator(Iterator<T> iterator)
{
// Convert iterator to iterable
Iterable<T> iterable = () -> iterator;
// Create a List from the Iterable
List<T> list = StreamSupport
.stream(iterable.spliterator(),
false
)
.collect(Collectors.toList());
// Return the List
return
list;
}
// Driver code
public
static
void
main(String[] args)
{
// Get the Iterator
Iterator<Integer>
iterator = Arrays.asList(
1
,
2
,
3
,
4
,
5
)
.iterator();
// Get the List from the Iterator
List<Integer>
list = getListFromIterator(iterator);
// Print the list
System.out.println(list);
}
}
Output:[1, 2, 3, 4, 5]