Как сохранить более одной строки на карте? - PullRequest
23 голосов
/ 16 сентября 2010

Можно ли установить более двух парных значений?

Например:

Map<String,String,String,String>

номер, имя, адрес, телефон - все вместе отображаются для отображения значений.Каждое значение связано с другими.

Ответы [ 8 ]

133 голосов
/ 16 сентября 2010

Вы находитесь в отрицании объекта.Вы должны использовать объект, который содержит номер, имя, адрес, телефон (возможно, вы могли бы назвать его ContactInformation) и поместить его в карту.

49 голосов
/ 16 сентября 2010

Нет. Map имеет только одну клавишу . Если вы хотите, чтобы ваше значение содержало больше информации, оберните строки в новый класс:

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));
13 голосов
/ 16 сентября 2010

«Правильное» решение состоит в том, чтобы использовать объект, который содержит значения в именованных полях, но в духе ответа на заданный вопрос, простое (если нечистое) решение будет использовать:

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-collection содержит серию классов, которые реализуют эту структуру прямо из поля, называемого ListMultimap , и его реализацию ArrayListMultimap

7 голосов
/ 16 сентября 2010

Нет, карта может иметь только один ключ и сопоставляться с одним значением.

Это Javadoc для карты:

Объект, который сопоставляет ключи со значениями.Карта не может содержать дубликаты ключей;каждый ключ может соответствовать максимум одному значению.

Что вы можете сделать, это создать сущность с именем 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);
4 голосов
/ 18 сентября 2010

На всякий случай, если вы хотите сохранить карту: «номер, имя» -> «адрес, телефон», и вы не хотите создавать класс для инкапсуляции этих атрибутов. Вы можете взглянуть на удобный MultiKey в Apache Commons Collections:

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

2 голосов
/ 16 сентября 2010

Хммм, Вы можете создать класс для Персоны с номером, именем, адресом и фононо, затем вы создадите Карту

0 голосов
/ 16 сентября 2010

Ваш вопрос предполагает, что вы хотите ввести ключ в каждое из 4 полей, а все остальные становятся значениями. В целом это один ключ и несколько значений, упакованных в объект.

Пожалуйста, подтвердите, что требуется.

0 голосов
/ 16 сентября 2010

Как уже говорили другие, карта - это отображение между ключом и значением. Вот почему Javadoc для карты говорит (начиная с дженериков в v5):

Interface Map<K,V>

... где K - тип ключа, а V - тип значения. Просто . Вы должны определить ровно два типа.

Стоит отметить, что в математике «карта» - это термин, означающий преобразование значения одного типа в значение другого типа. Карта Java является отражением этого (как и карта методов, доступная в коллекциях в Scala).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...