展平SetMultiMap并保留插入顺序

时间:2017-06-12 13:44:14

标签: java guava multimap

我在我的项目中使用LinkedHashMultimap。我需要在保留插入顺序的同时展平值。例如

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

或者我需要输出在List

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

P.S。我使用的是LinkedHashMultimap,因为我不希望values重复key,我需要保留广告订单

我怎么能这样做,所以我可以迭代上面的输出进行进一步处理?

2 个答案:

答案 0 :(得分:5)

Entries会被返回并按插入顺序进行迭代,因此您可以执行以下操作,以免失去Multimaps的好处。

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

答案 1 :(得分:1)

您可以在地图中使用List为同一个密钥存储多个值。

    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]

我希望这就是你想要的。