Wie jeef3 vorgeschlagen, die Modellierung des wahren Domäne, anstatt sep zu halten Rate, implizit gekoppelte Listen ist der richtige Weg zu gehen ... wenn dies eine Option ist.
Es gibt verschiedene Gründe, warum Sie diesen Ansatz möglicherweise nicht anwenden können. Wenn ja ...
A. Sie können einen Callback-Ansatz verwenden, wie von cletus vorgeschlagen.
B. Sie können weiterhin einen Iterator verfügbar machen, der das Domänenobjektelement für jede zusammengesetzte Instanz verfügbar macht. Dieser Ansatz zwingt Sie nicht dazu, eine parallele Listenstruktur herumzuhalten.
C. Sie können eine Variante davon verwenden und eine RowSet-Stil-Cursor-API verwenden. Nehmen wir an, IPerson
ist eine Schnittstelle, die Person beschreibt. Dann können wir tun:
public interface IPerson {
String getName();
void setName(String name);
...
}
public interface ICursor<T> {
boolean next();
T current();
}
private static class PersonCursor implements IPerson, ICursor<IPerson> {
private final List<String> _names;
...
private int _index = -1;
PersonCursor(List<String> names, List<Integer> ages) {
_names = names;
...
}
public boolean next() {
return ++_index < _names.size();
}
public Person current() {
return this;
}
public String getName() {
return _names.get(_index);
}
public void setName(String name) {
_names.set(0, name);
}
...
}
private List<String> _names = ...;
private List<Integer> _ages = ...;
Cursor<Person> allPeople() {
return new PersonCursor(_names, _ages);
}
Beachten Sie, dass der B-Ansatz auch Aktualisierungen vorgenommen werden, um zu unterstützen, zur Liste durch ein Domain-Schnittstelle Einführung und die Iterator Rückkehr mit Objekten ‚live‘.
mögliche Duplikat von [Bes t Möglichkeit, über zwei Listen gleichzeitig zu iterieren?] (http://stackoverflow.com/questions/3137944/best-way-to-iterate-over-tow-lists-simultan) –
Diese Frage ist subtil anders: es geht darum, wie Iteriere _Outside_ eine Klasse über zwei Sammlungen _inside_ einer Klasse, die die Schnittstelle ein wenig ändert. –