我创建了一个Multimap
Multimapmhm= 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进行排序时,是否会自动注意这种情况?
这不是功课问题,试图玩Google Guava.
你想在自然秩序键-只需使用自定义的Multimap
使用newListMultimap
从Multimaps
类:
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();
因为你可以把多重映射为地图键- >收集,只需使用JDK的TreeMap
这是根据其键的自然顺序进行排序.
例:
mhm.put(2, "some"); mhm.put(1, "value"); mhm.put(2, "here"); System.out.println(mhm.toString()); // { 1: [ "value" ], 2: [ "some", "here" ] }
如果你可以使用不可变的多图,并且不需要改变多图,那么它很简单:
new ImmutableListMultimap.Builder<Integer, String> .orderKeysBy(Ordering.natural()) .putAll(multimap) // or put each entry .build();