Как создать карту, имеющую несколько значений, сопоставленных одному ключу из списка? - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть данные, извлеченные в список карты, который имеет несколько значений, связанных с тем же ключом. Теперь мне нужно извлечь пары ключ-значение из dbvalues ​​(который является списком карты) и поместить его в Map> Но как мне извлечь данные из списка карты, чтобы я мог поместить их в эту карту?

List<Map<String, Object>> dbvalues = new ArrayList<Map<String, Object>>();
dbvalues = JdbcTemplate.queryForList(sql_query);
Map<String, List<String>> test = new HashMap<String, List<String>>();

expected resulting Map - 
key1 - x,y,z
key2 - a,b,c...and so on

Ответы [ 2 ]

2 голосов
/ 17 апреля 2019

Вы можете просмотреть .entrySet() из Map<String, List<String>>, распечатать каждую клавишу и объединить значения (List<String>) с помощью ,

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

// Fill with sample data
test.put("key1", Arrays.asList("x", "y", "z"));
test.put("key2", Arrays.asList("a", "b", "c"));

// Print the contents
for (Entry<String, List<String>> e : test.entrySet()) {
    System.out.println(e.getKey() + " - " + String.join(",", e.getValue()));
}

// This prints:
// key1 - x,y,z
// key2 - a,b,c
0 голосов
/ 17 апреля 2019

Вы можете использовать com.google.common.collect.ListMultimap от Guava

из javadoc com.google.common.collect.Multimap:

Это коллекция, которая отображаетключи к значениям, аналогичные java.util.Map, но в которых каждый ключ может быть связан с несколькими значениями.Вы можете визуализировать содержимое мультикарты в виде карты от ключей до непустых коллекций значений.

Самый простой способ создания мультикарты - это использование MultimapBuilder, которая позволяет вам настроить способключи и значения должны быть представлены.Например:

// creates a ListMultimap wich will behave like an Map<String,ArrayList<Object>>
ListMultimap<String, Object> listMultimap = MultimapBuilder.hashKeys().arrayListValues().build();

Если у вас есть мультикарта, вы можете просто поместить ключ, пары значений для циклов:

for(final Map<String,Object> map : dbvalues){
    for(final Entry<String,Object> entry : map.entrySet()){
        listMultimap.put( entry.getKey(), entry.getValue() );
    }
}

Для получения дополнительной информации о мультикартах: https://github.com/google/guava/wiki/NewCollectionTypesExplained#multimap

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