5

我有来自 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);

但正如您所见,TreeMultiMap.create方法有 2 个参数 - 键和值的比较器。我如何只能通过键对 MultiMap 进行排序?

4

2 回答 2

7

使用MultimapBuilder

 Multimap<String, MyObj> multimap = 
      MultimapBuilder.treeKeys().linkedListValues().build();
于 2016-03-28T18:12:49.043 回答
6

Louis Wasserman 回答后更新即使我的原始答案解决了问题并回答了问题,我认为这是更优雅的解决方案。

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

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

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

Multimap<String, MyObj> sortedMultiMap = Multimaps.newMultimap(
            Maps.<String, Collection<MyObj>>newTreeMap(/* your comparator here*/),
            Lists::newLinkedList);
于 2016-03-28T10:18:12.760 回答