基于key和ignore值对TreeMultiMap进行排序

时间:2016-06-05 16:26:17

标签: java sorting guava

所以我做了一些研究并得出结论我需要使用多树图,当我使用树图时它允许我根据键进行排序但是我需要多个值,尽管使用了树图将解决问题。

我的目标是按优先级对用户进行排序,但是大多数用户的默认优先级为0,其中一个优先于其他用户(这就是我需要多图的原因)。但是我没有弄清楚如何构建TreeMultiMap。

我从未真正做过比较器的任何工作,这是我现在的主要问题。我希望有人可以指出我正确的方向,或完全允许我解决问题的方向。

请注意TreeMap<Integer, List<Entry>>确实浮现在脑海中,但我宁愿不使用它,因为它看起来很乱,我确信有更好,更简单的方法来实现我需要的东西。

谢谢

2 个答案:

答案 0 :(得分:1)

Guava的Multimap implementations没有公共构造函数,因此出现“错误”的问题 - 您应该使用静态方法(即每个实现中的create)来构造多图的实例。您可能对TreeMultimap.create()感兴趣(“地图”中不是大写“m”),它会创建SortedSetMultimap并大致等同于TreeMap<K, TreeSet<V>>。例如:

SortedSetMultimap<Integer, String> multimap = TreeMultimap.create();
multimap.put(0, "zero");
multimap.put(0, "nought");
multimap.put(1, "one");
System.out.println(multimap);
// prints: {0=[nought, zero], 1=[one]}

另一方面,如果您不想对值进行排序(或不能),可以使用自定义多图,可以使用MultimapBuilder创建:

ListMultimap<Integer, Entry> multimap = 
    MultimapBuilder.treeKeys().arrayListValues().build();

答案 1 :(得分:0)

因此,根据Xaerxess提供的信息,我决定研究Guava提供的其他地图和实现,但是找到了一种基于树形图创建有序多图的方法。

然后我使用了逆序比较器,它允许我对值进行排序,我需要它们。感谢所有其他人,他们对信息进行了评论,因为它非常有用。

我最终使用的代码如下:

Multimap<Integer, Entry> sortedMap = Multimaps.newListMultimap(new TreeMap<>(Collections.reverseOrder()), Lists::newArrayList);