2014-05-14 1 views
0

Je cherche une collection cyclique en Java. J'ai quelques joueurs dans Array (ils attendent leur tour) mais je voudrais changer Array à la collection cyclique donc il sera plus facile d'obtenir le prochain joueur. (Je sais comment cela peut être fait autrement, mais je voudrais utiliser collection cyclique déjà préparée en Java).Existe-t-il une liste cyclique, une file d'attente, tout ce qui est disponible dans les bibliothèques Java standard?

+0

Avez-vous considéré une file d'attente? Mais sinon, non, une collection cyclique n'est pas dans les bibliothèques Java standard pour autant que je sache. – awksp

+1

@ user3580294 La file d'attente n'est pas cyclique autant que je me souvienne. – Yoda

+0

apache commons collection a un. – njzk2

Répondre

0

Vous pouvez transformer n'importe quel Iterable en une collection cyclique. Continuez à demander Iterator s pour toujours.

class Ring<T> implements Iterable<T> { 
    // Source of all Iterators. 
    final Iterable<T> it; 
    // Current Iterator we are consuming. 
    Iterator<T> i; 

    public Ring(Iterable<T> it) { 
     this.it = it; 
     i = it.iterator(); 
    } 

    @Override 
    public Iterator<T> iterator() { 
     return new Iterator<T>() { 

      @Override 
      public boolean hasNext() { 
       // There's always a next for a Ring. 
       return true; 
      } 

      @Override 
      public T next() { 
       if (!i.hasNext()) { 
        // Iterator is exhausted - make a new one! 
        i = it.iterator(); 
       } 
       return i.next(); 
      } 

     }; 
    } 
} 

public void test() { 
    Ring<String> r = new Ring<>(Arrays.asList("One", "Two", "Three")); 
    int printed = 0; 
    for (String s : r) { 
     System.out.println(s); 
     if (++printed > 10) { 
      break; 
     } 
    } 
} 

Notez qu'il existe un cas de bord étrange lorsque le enveloppé Iterable délivre itérateurs vides mais je laisse ce détail à l'étudiant.

+0

Est-ce seulement moi qui lis "en faire un nouveau!" comme un petit enfant en disant "allons avoir plus de gâteau!"? –

+0

@AndrewG - Non! :) Moi aussi. – OldCurmudgeon

Questions connexes