Oczywiście, jest to pokazane w this odpowiedzi. Zasadniczo, iteracyjne nad iterable i skopiować jego zawartość w kolekcji:
public static <T> List<T> copyIterable(Iterable<T> iterable) {
Iterator<T> iter = iterable.iterator();
List<T> copy = new ArrayList<T>();
while (iter.hasNext())
copy.add(iter.next());
return copy;
}
Użyj go w następujący sposób uzyskany List
obiekt może być przekazany jako parametr do konstruktora HashSet
.
Iterable<Integer> list = Arrays.asList(1, 2, 3);
List<Integer> copy = copyIterable(list);
Set<Integer> aSet = new HashSet<Integer>(copy);
EDIT
Byłem pomylić cały czas. Iterable
to superinterface z Collection
, więc prosta (ale niebezpieczna) obsada zrobi lewę, o ile Iterable
był na początku wymagany jako Collection
.
Iterable<Integer> list = Arrays.asList(1, 2, 3);
Set<Integer> aSet = new HashSet<Integer>((Collection)list); // it works!
Dobre wyjaśnienie. Myślę, że dostaję twój punkt i intuicję. – VaidAbhishek