Java 扁平setmulti映射并保留插入顺序

Java 扁平setmulti映射并保留插入顺序,java,guava,multimap,Java,Guava,Multimap,我正在项目中使用LinkedHashMultimap。我需要在保持插入顺序的同时展平这些值。例如 SetMultimap<String, Integer> m = LinkedHashMultimap.create(); m.put("a", 1); m.put("b",2); m.put("a",3); 但我需要 a : 1 b : 2 a : 3 或者我需要将输出放在列表中 [a,1,b,2,a,3] 另外,我使用的是LinkedHashMultimap,因为我不希望键的

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

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

a : 1
b : 2
a : 3
或者我需要将输出放在列表中

[a,1,b,2,a,3]
另外,我使用的是
LinkedHashMultimap
,因为我不希望
键的
值重复,我需要保留插入顺序


如何执行此操作,以便迭代上述输出以进行进一步处理?

您可以使用映射内的列表为同一个键存储多个值

    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;
    }
}

我希望这就是您想要的方式。

您可以使用地图中的列表为同一个键存储多个值

    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;
    }
}
我希望这就是您想要的方式。

被返回,并按照插入顺序进行迭代,这样您就可以执行以下操作,而不会失去多重映射的好处

for (Map.Entry<String, Integer> entry : m.entries()) {
    System.out.println(entry.getKey() + " : " + entry.getValue());
}
for(Map.Entry:m.entries()){
System.out.println(entry.getKey()+“:”+entry.getValue());
}
将返回,并按照插入顺序进行迭代,这样您就可以执行以下操作,以免失去多重映射的好处

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

您可以通过扩展LinkedHashMultiMap创建一个包装类,并添加一个数组作为其字段之一,以完全按照您的需要跟踪订单。您可以通过扩展LinkedHashMultiMap创建一个包装类,并添加一个数组作为其字段之一,以完全按照您的需要跟踪订单。我需要一个扁平的保留插入顺序,如
[a,1,b,2,a,3]
@Krishna Kuntala。。如果我把你们的产量降低,我就得不到订单了。对!@user2731629我希望我更新的答案能解决你使用对象和链表而不是链表的问题。对不起!!。。它包含重复项。我不想要任何重复的值。如果您再次添加
a,3
,则不应添加它。这就是我使用SetMuliMap的原因。我需要一个扁平的版本,通过保留插入顺序,如
[a,1,b,2,a,3]
@Krishna Kuntala。。如果我把你们的产量降低,我就得不到订单了。对!@user2731629我希望我更新的答案能解决你使用对象和链表而不是链表的问题。对不起!!。。它包含重复项。我不想要任何重复的值。如果您再次添加
a,3
,则不应添加它。这就是我使用SetMuliMap的原因。