How to Convert an Iterator to Set in Java


How can we convert an Iterator into a Set in Java?

Suppose we have an iterator iter and a set set.

Iterator<T> iter;

1. Using for loops

Iterators provide a way to access the elements of an object sequentially without exposing its underlying representation.

Naturally, we can sequentially access each element and add it to a set.

Set<T> set = new HashSet<>();
while (iterator.hasNext()) {
  T obj = iterator.next();
  set.add(obj);
}

2. Using Guava

We can also use Guava’s Sets.newHashSet() to create a mutable set containing the elements that the iterator would access.

Set<T> set = Sets.newHashSet(iter);

3. Using Apache Commons Collections

If we have access to Apache Commons Collections, we can use IteratorUtils.toList() to convert the iterator to a list. Then, we can convert the list to a set.

Set<T> set = new HashSet<>(IteratorUtils.toList(iter));