我创建了一个Multimap
Multimap<Integer, String> mhm= ArrayListMultimap.create();
我的数字范围从0到2400。
我已插入数据
mhm.put(800 ,"A")
mhm.put(1200 ,"B")
mhm.put(1200 ,"A")
mhm.put(1500 ,"B")
mhm.put(600 ,"A")
mhm.put(700 ,"B")
mhm.put(1200 ,"A")
mhm.put(1201 ,"B")
我想在关键字段Integer上对Multimap进行排序? satckoverflow上没有太多帖子告诉你如何做到这一点。
预期产出:
mhm.put(600 ,"A")
mhm.put(700 ,"B")
mhm.put(800 ,"A")
mhm.put(1200 ,"B")
mhm.put(1200 ,"A")
mhm.put(1200 ,"A")
mhm.put(1201 ,"A")
mhm.put(1500 ,"B")
请注意,预期输出仅按键排序。 如果两个键具有相同的值,则首先出现的键应该首先。 如何执行这个?我们在按键上对Multimap进行排序时会自动注意这种情况吗?
这不是家庭作业问题,试图围绕谷歌番石榴玩。
答案 0 :(得分:6)
您希望密钥按自然顺序排列 - 只需使用newListMultimap
from Multimaps
class自定义Multimap
:
ListMultimap<Integer, String> mhm = Multimaps.newListMultimap(
new TreeMap<Integer, Collection<String>>(),
new Supplier<List<String>>() {
public List<String> get() {
return Lists.newArrayList();
}
});
在Java 8中它更短:
ListMultimap<Integer, String> mhm = Multimaps.newListMultimap(
new TreeMap<>(), ArrayList::new);
但如果您使用的是Guava 16+(现在就应该使用),您可以使用更加干净的MultimapBuilder
:
ListMultimap<Integer, String> mhm = MultimapBuilder.treeKeys().arrayListValues().build();
因为您可以将multimap视为地图关键字 - &gt;集合,只需使用JDK的TreeMap
按照其键的自然顺序排序。
示例:
mhm.put(2, "some");
mhm.put(1, "value");
mhm.put(2, "here");
System.out.println(mhm.toString());
// { 1: [ "value" ], 2: [ "some", "here" ] }
答案 1 :(得分:5)
如果你可以使用不可变的多图,并且不需要改变多图,那么它很简单:
new ImmutableListMultimap.Builder<Integer, String>
.orderKeysBy(Ordering.natural())
.putAll(multimap) // or put each entry
.build();