如何仅通过键对Guava的MultiMap进行排序?

Les*_*ter 5 java treemaps guava

我有Guava图书馆的MultiMap.我想只用键对它进行排序.我试过了:

Multimap<String, MyObj> sortedMultiMap =
    TreeMultimap.create(Ordering.from(new Comparator<String>() {
        @Override
        public int compare(String lhs, String rhs) {
            //my comparison here
        }
    }), Ordering.natural());//i want not to sort values at all,MyObj doesn't implement Comparable
sortedMultiMap.putAll(notSortedMultiMap);
Run Code Online (Sandbox Code Playgroud)

但正如您所看到的,TreeMultiMap.create方法有两个参数 - 键和值的比较器.我怎么能只用键对MultiMap进行排序?

Lou*_*man 7

用途MultimapBuilder:

 Multimap<String, MyObj> multimap = 
      MultimapBuilder.treeKeys().linkedListValues().build();
Run Code Online (Sandbox Code Playgroud)

  • 很好,我用这个解决方案更新了我的答案,因为它是公认的答案,而且这个解决方案更优雅。希望这对你来说没问题。 (2认同)

gus*_*stf 5

路易斯·沃瑟曼回答后更新即使我的原始答案解决了问题并回答了问题,我认为这是更优雅的解决方案.

Multimap<String, MyObj> multimap = 
    MultimapBuilder.treeKeys(/* you comparator here */).linkedListValues().build();
Run Code Online (Sandbox Code Playgroud)

您可以使用Ordering.arbitrary()第二个参数,它不需要实现对象Comparable.

如果需要插入订单,您可以使用类似的东西

Multimap<String, MyObj> sortedMultiMap = Multimaps.newMultimap(
            Maps.<String, Collection<MyObj>>newTreeMap(/* your comparator here*/),
            Lists::newLinkedList);
Run Code Online (Sandbox Code Playgroud)