Du könntest:
- Verwenden Sie eine Karte mit einer Liste als Wert.
Map<KeyType, List<ValueType>>.
- Erstellen Sie eine neue Wrapper-Klasse und platzieren Sie Instanzen dieses Wrappers in der Map.
Map<KeyType, WrapperType>.
- Verwenden Sie eine Tupel-ähnliche Klasse (spart das Erstellen vieler Wrapper).
Map<KeyType, Tuple<Value1Type, Value2Type>>.
- Verwenden Sie mehrere Karten nebeneinander.
Beispiele
1. Karte mit Liste als Wert
// create our map
Map<String, List<Person>> peopleByForename = new HashMap<>();
// populate it
List<Person> people = new ArrayList<>();
people.add(new Person("Bob Smith"));
people.add(new Person("Bob Jones"));
peopleByForename.put("Bob", people);
// read from it
List<Person> bobs = peopleByForename["Bob"];
Person bob1 = bobs[0];
Person bob2 = bobs[1];
Der Nachteil bei diesem Ansatz ist, dass die Liste nicht an genau zwei Werte gebunden ist.
2. Verwenden der Wrapper-Klasse
// define our wrapper
class Wrapper {
public Wrapper(Person person1, Person person2) {
this.person1 = person1;
this.person2 = person2;
}
public Person getPerson1 { return this.person1; }
public Person getPerson2 { return this.person2; }
private Person person1;
private Person person2;
}
// create our map
Map<String, Wrapper> peopleByForename = new HashMap<>();
// populate it
Wrapper people = new Wrapper();
peopleByForename.put("Bob", new Wrapper(new Person("Bob Smith"),
new Person("Bob Jones"));
// read from it
Wrapper bobs = peopleByForename.get("Bob");
Person bob1 = bobs.getPerson1;
Person bob2 = bobs.getPerson2;
Der Nachteil dieses Ansatzes besteht darin, dass Sie für all diese sehr einfachen Containerklassen viel Kesselplattencode schreiben müssen.
3. Verwenden eines Tupels
// you'll have to write or download a Tuple class in Java, (.NET ships with one)
// create our map
Map<String, Tuple2<Person, Person> peopleByForename = new HashMap<>();
// populate it
peopleByForename.put("Bob", new Tuple2(new Person("Bob Smith",
new Person("Bob Jones"));
// read from it
Tuple<Person, Person> bobs = peopleByForename["Bob"];
Person bob1 = bobs.Item1;
Person bob2 = bobs.Item2;
Dies ist meiner Meinung nach die beste Lösung.
4. Mehrere Karten
// create our maps
Map<String, Person> firstPersonByForename = new HashMap<>();
Map<String, Person> secondPersonByForename = new HashMap<>();
// populate them
firstPersonByForename.put("Bob", new Person("Bob Smith"));
secondPersonByForename.put("Bob", new Person("Bob Jones"));
// read from them
Person bob1 = firstPersonByForename["Bob"];
Person bob2 = secondPersonByForename["Bob"];
Der Nachteil dieser Lösung ist, dass es nicht offensichtlich ist, dass die beiden Karten zusammenhängen. Ein Programmfehler könnte dazu führen, dass die beiden Karten nicht mehr synchron sind.