展平 SetMultiMap 并保留插入顺序
Flatten SetMultiMap and preserve the insertion order
我在我的项目中使用 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
或者我需要将输出放在列表中
[a,1,b,2,a,3]
P.S。我正在使用 LinkedHashMultimap
因为我不希望 key
重复 values
并且我需要保留插入顺序
我该怎么做才能迭代以上输出以进行进一步处理?
您可以在映射中使用 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]
希望这是你想要的。
Entries 返回并按插入顺序迭代,因此您可以执行以下操作以免失去 Multimaps
.
的好处
for (Map.Entry<String, Integer> entry : m.entries()) {
System.out.println(entry.getKey() + " : " + entry.getValue());
}
我在我的项目中使用 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
或者我需要将输出放在列表中
[a,1,b,2,a,3]
P.S。我正在使用 LinkedHashMultimap
因为我不希望 key
重复 values
并且我需要保留插入顺序
我该怎么做才能迭代以上输出以进行进一步处理?
您可以在映射中使用 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]
希望这是你想要的。
Entries 返回并按插入顺序迭代,因此您可以执行以下操作以免失去 Multimaps
.
for (Map.Entry<String, Integer> entry : m.entries()) {
System.out.println(entry.getKey() + " : " + entry.getValue());
}