所以我做了一些研究并得出结论我需要使用多树图,当我使用树图时它允许我根据键进行排序但是我需要多个值,尽管使用了树图将解决问题。
我的目标是按优先级对用户进行排序,但是大多数用户的默认优先级为0,其中一个优先于其他用户(这就是我需要多图的原因)。但是我没有弄清楚如何构建TreeMultiMap。
我从未真正做过比较器的任何工作,这是我现在的主要问题。我希望有人可以指出我正确的方向,或完全允许我解决问题的方向。
请注意TreeMap<Integer, List<Entry>>
确实浮现在脑海中,但我宁愿不使用它,因为它看起来很乱,我确信有更好,更简单的方法来实现我需要的东西。
谢谢
答案 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);