какая коллекция Java, которая предоставляет несколько значений для одного и того же ключа - PullRequest
5 голосов
/ 28 июля 2011

Какой тип коллекции Java, который возвращает несколько значений для одного и того же ключа?

Например, я хочу вернуть 301,302,303 для ключа 300.

Ответы [ 3 ]

17 голосов
/ 28 июля 2011

Вы можете использовать List в качестве значения вашего Map:

List<Integer> list = new ArrayList<Integer>();
list.add(301);
list.add(302);
list.add(303);

Map<Integer, List<Integer>> map = new HashMap<Integer, List<Integer>>();
map.put(300, list);

map.get(300); // [301,302,303]

В качестве альтернативы, вы можете использовать Multimap из Гуавы, как предлагает biziclopкоторый имеет гораздо более чистый синтаксис и множество других очень полезных служебных методов:

Multimap<Integer, Integer> map = HashMultimap.create();
map.put(300, 301);
map.put(300, 302);
map.put(300, 303);

Collection<Integer> list = map.get(300); // [301, 302, 303]
8 голосов
/ 28 июля 2011

Вы можете использовать Multimap, он находится под лицензией Apache.

См. эту ссылку . Для потомков:

org.apache.commons.collections
Interface MultiMap

All Superinterfaces:
    java.util.Map

All Known Implementing Classes:
    MultiHashMap, MultiValueMap

public interface MultiMap
extends java.util.Map

Defines a map that holds a collection of values against each key.

A MultiMap is a Map with slightly different semantics. Putting a value into the map will add the value to a Collection at that key. Getting a value will return a Collection, holding all the values put to that key.

For example:

 MultiMap mhm = new MultiHashMap();
 mhm.put(key, "A");
 mhm.put(key, "B");
 mhm.put(key, "C");
 Collection coll = (Collection) mhm.get(key);

coll will be a collection containing "A", "B", "C". 
1 голос
/ 06 марта 2014
  1. Как упоминалось в приведенном выше комментарии, всегда есть мультикарта Guava
    http://docs.guava -libraries.googlecode.com / git / javadoc / com / google / common / collect / Multimap.html

  2. Apache Commons Collections 4 имеет универсальную версию MultiMap http://commons.apache.org/proper/commons-collections/apidocs/org/apache/commons/collections4/MultiMap.html

  3. JAX-RS определяет интерфейс MultivaluedMap, который реализуется всемиПоставщики JAX-RS.Если ваш вариант использования находится в контексте службы / клиента REST JAX-RS, можно было бы использовать их реализацию без добавления другой зависимости.

    javax.ws.rs.core.MultivaluedMap (каждыйJAX RS Provider имеет собственную реализацию)

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