2017-06-12 56 views
0

我在我的項目中使用LinkedHashMultimap。我需要在保留插入順序的同時將這些值展平。例如與展平SetMultiMap並保留廣告訂單

SetMultimap<String, Integer> m = LinkedHashMultimap.create(); 
m.put("a", 1); 
m.put("b",2); 
m.put("a",3); 

我得到以下輸出

a : [1,3] 
b : 2 

但我需要

a : 1 
b : 2 
a : 3 

或者我需要的輸出是在一個列表

[a,1,b,2,a,3] 

PS我使用LinkedHashMultimap,因爲我不想重複valueskey,我需要保持插入順序

我怎麼能做到這一點,所以我可以通過進一步的處理上面的輸出循環?

+0

您可以通過擴展LinkedHashMultiMap創建一個包裝類,並添加一個數組,通過保留插入順序,比如'[就像你希望它太 –

回答

5

Entries被返回並按照它們被插入的順序進行迭代,因此您可以執行以下操作,以免失去Multimaps的好處。

for (Map.Entry<String, Integer> entry : m.entries()) { 
    System.out.println(entry.getKey() + " : " + entry.getValue()); 
} 
1

您可以使用地圖內的列表來存儲同一個鍵的多個值。

public class Test { 

    public static void main(final String[] args) { 
     LinkedList<Values> list = new LinkedList<Values>(); 
     list.add(new Values("a", 1)); 
     list.add(new Values("b", 2)); 
     list.add(new Values("a", 3)); 
     System.out.println(list); 
    } 
} 

class Values { 
    String key; 
    int value; 

    public Values(final String key, final int value) { 
     super(); 
     this.key = key; 
     this.value = value; 
    } 

    @Override 
    public String toString() { 
     return key + "," + value; 
    } 
} 

這個程序的輸出是:

[a,1, b,2, a,3] 

我希望這是你想要的。

+0

我需要一個扁平版本會保留訂單的軌道上它的領域之一a,1,b,2,a,3]'@Krishna Kuntala ..如果我放棄了你的輸出,我不會得到命令。對! – user2731629

+1

@ user2731629我希望我的更新答案可以解決您使用對象和鏈接列表而不是鏈接哈希映射的問題。 –

+0

對不起!!其包含重複。我不想要任何重複的值。如果你再次添加'a,3',它不應該添加它。這就是爲什麼我使用SetMuliMap。 – user2731629