web-dev-qa-db-ja.com

マップに複数の文字列を保存するにはどうすればよいですか?

3つ以上のペア値を設定することは可能ですか?

例えば:

Map<String,String,String,String>

番号、名前、住所、電話-値を表示するためにすべてが一緒になります。他の値に関連付けられている各値。

23
user441978

あなたはオブジェクトを拒否しています。番号、名前、住所、電話番号を保持するオブジェクトを使用して(おそらく、ContactInformationと呼ぶことができます)、それをマップに配置する必要があります。

135
Joachim Sauer

いいえ。Mapには1つしかありませんkeyvalueに詳細情報を含める場合は、文字列を新しいクラスでラップします。

public class PersonalInfo {
   private final String name;
   private final String address;
   private final String phone;

   // constructor and getters
}

map.put(number, new PersonalInfo(name, address, phone));
49
Bozho

「正しい」解決策は、名前付きフィールドの値を保持するオブジェクトを使用することですが、尋ねられた質問に答えるという精神で、単純な(汚れている場合)解決策は次のように使用します。

Map<String,List<String>> yourMap = new HashMap<String,List<String>>();

List<String> info = new ArrayList<String>();
info.add(number);
info.add(name);
info.add(address);
info.add(phone);

yourMap.put(key, info);

google-collections には、この構造をすぐに実装する一連のクラスがあります ListMultimap そしてその実装 ArrayListMultimap

13
Gareth Davis

いいえ、マップは1つのキーのみを持つことができ、1つの値にマップできます。

これはMap用のJavadocです。

キーを値にマップするオブジェクト。マップに重複するキーを含めることはできません。各キーは最大で1つの値にマップできます。

できることは、Userというエンティティを作成することです。

public class User implements Serializable {

    private String firstName;
    private String lastNumber;
    private String address;
    private String phoneNumber;

    //Generated getters and setters here....
}

次に、そのようにマップに追加します。

Map<String, User> userMap = new HashMap<String, User>();
User user = new User();
//populate user
userMap.put(uniqueUserID, user);
7
Buhake Sindi

「番号、名前」->「住所、電話番号」のマップを維持し、これらの属性をカプセル化するクラスを作成したくない場合に備えて。 ApacheCommonsCollectionsの便利なMultiKeyをご覧ください。

http://commons.Apache.org/collections/apidocs/org/Apache/commons/collections/keyvalue/MultiKey.html

4
ThiamTeck

うーん、番号、名前、住所、電話番号を使用してPersonのクラスを作成してから、マップを作成できます。

2
Ricardo Lima

他の人が言っているように、マップはキーと値の間のマッピングです。これが、mapのjavadocが(v5のジェネリックス以降)と言っている理由です。

Interface Map<K,V>

...ここで、Kはキーのタイプ、Vは値のタイプです。 <K、V>だけです。正確に2つのタイプを定義する必要があります。

数学では、「マップ」は、あるタイプの値を別のタイプの値に変換することを意味する用語であることに言及する価値があります。 Java Mapはこれを反映しています(Scalaのコレクションで利用可能なメソッドマップも同様です)。

0
Synesso

あなたの質問は、4つのフィールドのそれぞれにキーが必要であり、他のすべてのフィールドが値になることを示唆しています。一般に、これは1つのキーであり、複数の値がオブジェクトにパックされています。

必要なものをご確認ください。

0
Ashish Patil