我想知道您是否知道在Java语言中对数组的ArrayList进行排序的方法。我有一个函数,它给一个特定的数组一个介于0和1之间的分数。我想对ArrayList进行排序,这样得分最高的数组就会排在第一位。
public double evaluate(int[] toEvaluate) {
double result = 0.0;
for (int i = 0; i < toEvaluate.length; i++) {
result += table[i][casesMap.get(toEvaluate[i])];
}
return result / toEvaluate.length;
}
有什么想法吗?
发布于 2017-05-24 18:59:39
您应该将Collections.sort()
与自定义Comparator
一起使用
List<Integer[]> arrays = new ArrayList<>();
arrays.add(new Integer[]{1, 2});
arrays.add(new Integer[]{3, 4});
Collections.sort(arrays, new Comparator<Integer[]>() {
public int compare(Integer[] a, Integer[] b) {
return 1; // FIX this according to your needs
}
});
上面的compare()
只是一个存根,你应该根据文档来实现它,它可以被替换为一个lambda表达式。在上面的代码中,应该是:Collections.sort(arrays, (a, b) -> 1)
。
发布于 2017-05-24 19:03:04
您必须编写一个比较器和比较方法覆盖,您可以在其中使用您的函数来计算COMP值
@Override
public int compare(Integer[] o1, Integer[] o2) {
int o1Number=ratingFunction(o1) ;
int o2Number=ratingFunction(o2) ;
int cmp=o1Number.compareTo(o2Number);
return cmp;
}
发布于 2017-05-24 19:03:28
您可以使用比较器对列表进行降序排序,也可以使用集合排序方法,然后使用反向方法使列表降序,如下所示:
List<Integer> numberList =new ArrayList<Integer>();
numberList.add(3);
numberList.add(1);
numberList.add(2);
//before sort
for (Integer integer : numberList) {
System.out.println(integer);
}
//sorting
Collections.sort(numberList);
Collections.reverse(numberList);
//after sort
for (Integer integer : numberList) {
System.out.println(integer);
}
https://stackoverflow.com/questions/44156133
复制相似问题