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 对不可比较的对象进行排序_Java_Sorting - Fatal编程技术网

Java 对不可比较的对象进行排序

Java 对不可比较的对象进行排序,java,sorting,Java,Sorting,我有一个不可比较的对象列表。但是,我仍然希望根据提供的索引位置数组对对象列表进行排序。排序此列表的最快和最有效的方法是什么?以下是一个例子: List<Colour> list = new ArrayList<Colour>(); list.add(Colour.BLUE); list.add(Colour.GREEN); list.add(Colour.RED); list.add(Colour.YELLOW); list.add(Colour.GREEN); int

我有一个不可比较的对象列表。但是,我仍然希望根据提供的索引位置数组对对象列表进行排序。排序此列表的最快和最有效的方法是什么?以下是一个例子:

List<Colour> list = new ArrayList<Colour>();
list.add(Colour.BLUE);
list.add(Colour.GREEN);
list.add(Colour.RED);
list.add(Colour.YELLOW);
list.add(Colour.GREEN);

int[] order = new int[] {3, 1, 2, 0, 4};

我的具体要求是Java解决方案,但我也有兴趣了解其他语言的解决方案。

为什么不直接从索引创建列表?不需要“排序”

List<Colour> sortedList = new ArrayList<Colour>();
for (int index : order) {
    sortedList.add(list.get(index));
}

Comparator是您的解决方案您应该使用Map而不是ListComparator没有任何用处。如果所需的顺序要求红色和绿色中的哪一个在这两个顺序中都是红色,您如何定义它们之间的第一个顺序?请仔细阅读问题。比较器可以很好地使用:获取列表中两种颜色的索引,获取顺序数组中每个颜色索引的索引,然后比较这些顺序索引。@Alex,确定您可以使用比较器,您需要传递
order
作为参数。但是,如果您已经有了最终索引,那么列表实际上是排序的,我假设您只有相对索引(即定义颜色顺序的索引),而不是最终索引。这个问题只不过是一个带有最终索引的琐碎问题,所以我甚至没有想到它可能是这样的。我喜欢那种“做X的最好方法就是不做X”的答案。
List<Colour> sortedList = new ArrayList<Colour>();
for (int index : order) {
    sortedList.add(list.get(index));
}
var sorted = order.Select(index => list[index]).ToList();