Fournir un itérateur sur le contenu des deux listes en même temps?

Supposons que j'ai ceci:

public class Unit<MobileSuit, Pilot> {

    ...

    List<MobileSuit> mobileSuits;
    List<Pilot> pilots;

    ...
}

Et je voudrais parcourir la paire de chacun dans la façon la plus simple à l'extérieur de la classe. Comment dois-je faire? J'ai pensé à cela:

public class Unit<MobileSuit, Pilot> {

    ...
    Iterator<MobileSuit> iteratinMechas;
    Iterator<Pilot> iteratinPeople;

    class IteratorCustom<MobileSuit, Pilot> implements Iterator {

        public boolean hasNext() {
            return iteratinMechas.hasNext() && iteratinPeople.hasNext();
        }

        public void remove() {
            iteratinMechas.remove();
            iteratinPeople.remove();
        }

        public Object next() {
            ///!\
        }

    }

    public Iterator iterator() {
        return new IteratorCustom<MobileSuit, Pilot>(mobileSuits, pilots);
    }
}

Quelque chose le long de ces lignes.

De toute façon, le problème est que je ne peux pas vraiment revenir juste un seul objet à partir de next(), et j'ai aussi ne peut pas avoir un Itérateur prendre plus d'un type. Donc, toutes les pensées?

Aussi, je ne peux pas faire une nouvelle classe de combiner MobileSuit et Pilote. J'ai besoin de les garder séparés, même si je suis une itération à travers les deux à la fois. La raison en est qu'il peut être Mobile Costumes qui n'ont pas de pilotes, et je ne suis pas sûr de la façon de corriger cela en de les garder à la même classe. Cette classe a besoin d'être traitées dans d'autres endroits, donc, je n'aurais d'unifier une interface et un tas d'autres choses. Fondamentalement, supposons MobileSuit et le Pilote doivent être séparées.

  • Si il va y avoir des mobilesuits qui n'ont pas de pilotes, je suis en supposant que vous avez de plus en plus mobiles convient que les pilotes. Que peut faire votre chèque pour hasNext() problématique, car il ne retourne true si il y a plus d'éléments dans les deux listes. Je pense que ça pourrait aider à obtenir la réponse à votre question, si vous pouvez fournir un peu plus d'infos sur les critères de comment vous pouvez combiner les deux.
  • Cooney Ouais, maintenant que vous le dites, que hasNext() serait à tout le moins de mal.
  • OMG +1 pour le Gundam-ish question.
  • Question très intéressante. Je n'avais pas entendu parler de la fermeture à glissière avant stackoverflow.com/questions/1115563/... alors je me demandais "Pourquoi ne pas Goyave en charge?" Apparemment, il n'en interne. Il y a eu un débat sur la soutenir de l'extérieur - voir code.google.com/p/guava-libraries/issues/detail?id=35 Il y a une question connexe, ici stackoverflow.com/questions/5278040/...
  • Pour parcourir en parallèle des collections en général, voir la Façon la plus élégante parcourir en parallèle des collections? bien qu'ici c'est différent parce que vous voulez effectuer une itération à l'extérieur de la classe.
  • Notez que si votre Unit classe fournit un iterator() méthode, en général, vous voulez ajouter implements Iterable<...> de la classe de signature.