Ordnet mehrere Arten von Werten in Java zu

8

Ich muss ein merkwürdiges Szenario schaffen. Es wird wie folgt beschrieben:

Ich muss eine Map entwerfen, bei der die Schlüssel immer vom Typ String sind. Der ' Wert ' für einen der Schlüssel kann jedoch ein String oder eine Liste sein (hängt von der Anzahl der Werte ab, die ein bestimmter Schlüssel haben kann. 'Value' wird sein Eine Zeichenfolge, wenn dieser bestimmte Schlüssel nur einen Wert hat und eine Liste sein muss, wenn der Schlüssel viele Werte enthält. Wie erreiche ich dieses Szenario?

Zum Beispiel: Es gibt 2 Schlüssel in einer Karte, nämlich "Name" und "Telefonnummern". Eine Person kann nur einen Namen und mehrere Telefonnummern haben. Hier sollte der erste Schlüssel, d.h. "Name", den Typ "String" für Wert haben, während für den zweiten Schlüssel, d. H. "Telefonnummern", den Typ "Liste" für Wert haben sollte. Wie man eine solche Map deklariert. Ist es möglich?

    
Surya Chandra 13.02.2012, 11:44
quelle

5 Antworten

13

Es ist möglich, etwas wie Map<String, Object> zu machen.

Aber : Ich würde Ihnen dringend empfehlen, Ihren Entwurf zu überdenken. Sie sollten stattdessen eine Klasse für Ihre Personen verwenden. Auf diese Weise können Sie: Map<String, Person> mit Person Getter und Setter für Namen, Telefonnummern und andere Informationen haben.

Beispiel Person class:

%Vor%     
nfechner 13.02.2012, 11:50
quelle
2

Natürlich gibt es. Wähle dein Gift aus:

%Vor%     
Perception 13.02.2012 11:52
quelle
1

Nun, warum nicht ein Map<String, List<String>> machen? Sie könnten immer nur ein Element zu Ihrer Liste hinzufügen, wenn es nur einen Wert gibt, oder Sie verwenden einen allgemeinen Supertyp von String und Liste, also würden Sie

erhalten %Vor%     
bvanvelsen 13.02.2012 11:54
quelle
1

Ich würde einen der folgenden Schritte ausführen:

  1. Verwende ein Multimap<String, String> . Die Multimap würde einen oder mehrere Werte enthalten mit jedem Schlüssel verknüpft.

  2. Verwende ein Map<String, Either<String, List<String>>> . Verwenden Sie eine Entweder , um zwischen einem einzelnen oder mehreren Werten zu unterscheiden.

John B 13.02.2012 12:28
quelle
0

Warum nicht eine PhoneNumber-Wrapperklasse erstellen, die eine API zum Sortieren von ein oder mehreren Telefonnummern freigibt und dann entweder eine oder alle (mehrere) Telefonnummern abrufen und dann eine Zuordnung von String und PhoneNumber erstellen kann? Etwas wie:

%Vor%

}

    
Shivan Dragon 13.02.2012 11:51
quelle

Tags und Links