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 つの引数 (キーと値のコンパレータ) があります。マルチマップをキーだけでソートするにはどうすればよいですか?

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()2 番目の引数として使用できます。オブジェクトを実装する必要はありませんComparable

広告掲載オーダーが必要な場合は、次のようなものを使用できます

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