Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基于key和ignore值对TreeMultiMap进行排序_Java_Sorting_Guava - Fatal编程技术网

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

Java 基于key和ignore值对TreeMultiMap进行排序,java,sorting,guava,Java,Sorting,Guava,所以我做了一些研究,得出结论,我需要使用一个多树映射,当我使用一个树映射时,它允许我根据键进行排序,但是我需要多个值,尽管使用树映射可以解决这个问题 我的目标是按优先级对用户进行排序,但是大多数用户的默认优先级为0,一个优先于其他用户(这就是我需要多重映射的原因)。然而,我没有弄清楚如何构建一个树形图 我从来没有真正做过任何关于比较器的工作,这是我现在的主要问题。我希望有人能给我指出正确的方向,或者是一个完全可以让我解决问题的方向 请注意,我确实想到了TreeMap,但我不想使用它,因为它看起来

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

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

我从来没有真正做过任何关于比较器的工作,这是我现在的主要问题。我希望有人能给我指出正确的方向,或者是一个完全可以让我解决问题的方向

请注意,我确实想到了
TreeMap
,但我不想使用它,因为它看起来很凌乱,我相信有更好更简单的方法来实现我所需要的

感谢Guava's没有公共构造函数,因此存在“出错”问题-您应该使用静态方法(即在每个实现中
create
)来构造multimap的实例。您可能对(而不是“map”中没有大写字母“m”)感兴趣,它创建并大致相当于
TreeMap
。例如:

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]}

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

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

我最终使用的代码如下:

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

我添加了关于我所拥有的代码的部分,但我从来没有想到如何创建一个没有错误的树映射:创建一个按键和值的自然顺序排序的空树映射。那很容易请注意,对于
TreeMultimap
“键和值已排序”。如果您不想对值进行排序,那么这个类不适合您。
TreeMap
将对键进行排序,但值是按插入顺序排列的,因此如果您希望它按这种方式工作,那么这可能是正确的答案。
Multimap<Integer, Entry> sortedMap = Multimaps.newListMultimap(new TreeMap<>(Collections.reverseOrder()), Lists::newArrayList);