簡體   English   中英

如何創建具有多個值映射到列表中相同鍵的映射 <Map<String,Object> ?

[英]How to create a map having multiple values mapped to same key out of List<Map<String,Object>?

我在地圖列表中提取了一個數據,該列表具有與同一鍵關聯的多個值。 現在,我需要從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

您可以遍歷Map<String, List<String>>.entrySet() ,打印每個鍵,然后將值( 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

您可以使用番石榴的com.google.common.collect.ListMultimap

來自com.google.common.collect.Multimap的javadoc:

它是一個將鍵映射到值的集合,類似於java.util.Map,但是其中每個鍵都可以與多個值關聯。 您可以將多圖的內容可視化為從鍵到非空值集合的圖。

創建Multimap的最直接的方法是使用MultimapBuilder,它使您可以配置應該如何表示鍵和值。 例如:

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

一旦有了多圖,就可以將鍵值對放入for循環中:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM