按降序(反向)顺序对TreeMultimap进行排序

时间:2016-01-31 13:33:54

标签: java collections maps guava multimap

输出为:顶部密码:{1=[456008, 456600, 456666], 2=[560089], 4=[456098, 567789]}

我希望他们按此顺序排列:{4=[456098,567789], 2=[560089], 1=[456008, 456600, 456666]}

HashMap<Integer, Integer> totalCustomersByPin = new HashMap<Integer, Integer>();
TreeMultimap<Integer, Integer> totalDeliveriesToPin = TreeMultimap.create();
Iterator<Entry<Integer, Integer>> iterator = totalCustomersByPin.entrySet().iterator();

while (iterator.hasNext()) {
    Entry<Integer, Integer> pair = iterator.next();
    totalDeliveriesToPin.put(pair.getValue(), pair.getKey());
}
System.out.println("Top pincodes:" + totalDeliveriesToPin);

2 个答案:

答案 0 :(得分:8)

您可以在创建TreeMultimap时设置关键比较器。您可以使用Ordering.natural()然后调用reverse()按照自然顺序的相反顺序对密钥进行排序。

示例代码:

public static void main(String[] args) {
    TreeMultimap<Integer, Integer> map = TreeMultimap.create(Ordering.natural().reverse(), Ordering.natural());
    map.put(1, 456008);
    map.put(1, 456600);
    map.put(1, 456666);
    map.put(2, 560089);
    map.put(4, 456098);
    map.put(4, 567789);
    System.out.println(map);
}

这将打印:{4=[456098, 567789], 2=[560089], 1=[456008, 456600, 456666]}

答案 1 :(得分:0)

这是我发现对我真正有用的东西

  SortedSetMultimap<String, String> multiMap = TreeMultimap.create(
                Comparator.reverseOrder(), // Key sorting
                (o1, o2) -> 0              // Value sorting
        );