2017-06-12 34 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