Some iterators might be.  Many may not be.  Certainly Iterator as an
interface has been out there for long enough there are Iterator
implementations out there that aren't cloneable -- say, Iterators reading
from a BufferedReader, where there really won't be any way to do what
you're hoping for; BufferedReaders certainly aren't cloneable.

On Sat, Sep 10, 2016 at 4:33 PM Dave Brosius <dbros...@mebigfatguy.com>
wrote:

> Yes Louis is correct.
>
> I want the pair wise associations or all elements of a set.
>
> Fee-Fi
>
> Fee-Fo
>
> Fee-Fum
>
> Fi-Fo
>
> Fi-Fum
>
> Fo-Fum
>
>
> the independent iterators produce Fee-Fee (etc) as well as the duplicate
> Fee-Fi and Fi-Fee (etc), both of which i don't want.
>
>
> This is obviously simplistic with index based collections, but not with
> sets/maps
>
> I don't see why an Iterator isn't by nature easily cloneable.
>
>
>
> On 09/10/2016 06:45 PM, Jonathan Bluett-Duncan wrote:
>
> Ah okay Louis, if that's the case then that certainly makes sense, and I'd
> agree that there's no good way of doing so, as one would need to copy the
> set into a list.
>
> Dave, did Louis hit the mark? If not, would you kindly go into further
> detail as to exactly what it is you're trying to do?
>
> Best,
> Jonathan
>
> On 10 September 2016 at 23:36, Jonathan Bluett-Duncan <
> jbluettdun...@gmail.com> wrote:
>
> 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);             }         }     } }
>
>

Reply via email to