Hi Dave, Rather than using Iterator.clone(), how about you just call collection.iterator() 2 times to return 2 unique, non-same iterators; something like the following:
import java.util.Collections; import java.util.Iterator; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; public class Example { public static void main(String[] args) { Set<String> s = Collections.newSetFromMap(new ConcurrentHashMap<String, Boolean>()); s.add("Fee"); s.add("Fi"); s.add("Fo"); s.add("Fum"); Iterator<String> it1 = s.iterator(); for (String v1 = null; it1.hasNext(); v1 =it1.next()) { Iterator<String> it2 = s.iterator(); // a completely separate iterator to it1 for (String v2 = null; it2.hasNext(); v2 = it2.next()) { System.out.println(v1 + " <-->" + v2); } } } } Or, even better, if you're using Java 5+, you can skip using Iterators altogether and use for-loops directly: import java.util.Collections; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; public class Example { public static void main(String[] args) { Set<String> s = Collections.newSetFromMap(new ConcurrentHashMap<String, Boolean>()); s.add("Fee"); s.add("Fi"); s.add("Fo"); s.add("Fum"); for (String v1 : s) { for (String v2 : s) { System.out.println(v1 + "<-->" + v2); } } } } Kind regards, Jonathan On 10 September 2016 at 23:13, Dave Brosius <dbros...@mebigfatguy.com> wrote: > It would be nice to be able to associate each element in a collection with > another element in the collection, which is something very easily done with > index based collections, but with sets, etc this isn't so easy... unless > i'm having a brainfart. > > So i'd like to do this, but Iterator doesn't implement Cloneable... Any > reason not to? or is there another way that's missing me? > > public class ItClone { > > public static void main(String[] args) { > Set<String> s = Collections.newSetFromMap(new > ConcurrentHashMap<String, Boolean>()); > > s.add("Fee"); > s.add("Fi"); > s.add("Fo"); > s.add("Fum"); > > Iterator<String> it1 = s.iterator(); > while (it1.hasNext()) { > String v1 = it1.next(); > > Iterator<String> it2 = (Iterator<String>) it1.*clone*(); > while (it2.hasNext()) { > String v2 = it2.next(); > > System.out.println(v1 + " <-->" + v2); > } > } > } > } >