Make iterators cloneable?
Jonathan Bluett-Duncan
jbluettduncan at gmail.com
Sat Sep 10 22:36:22 UTC 2016
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 <dbrosius at 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);
> }
> }
> }
> }
>
More information about the core-libs-dev
mailing list