我正在尝试对存储对象的数组(对象hits [])进行排序,我需要按照已经排序的ArrayList中的确切顺序(升序,降序)进行排序。这两个之间没有任何联系。
我看到了类似的问题,不同之处在于您使用ArrayList中的顺序对ArrayList进行排序。但我要相反。 我试图将ArrayList转换为简单Array并从那里去,所以问题就变成了“使用另一个数组对数组进行排序”,但这并没有真正帮助我,因为我想要“使用另一个数组对对象数组进行排序”。
Arrays.sort(hits, new Comparator<ArrayList<Double>>() {
@Override
public int compare(ArrayList<Double> c1, ArrayList<Double> c2) {
return Double.compare(c1.get(0), c2.get(0));
}
});
我想要上面代码中的某些内容,这使我使用当前用作参数的类型的错误“不适用”。
答案 0 :(得分:1)
未根据Comparator
进行操作来定义Collection
;但是就 elements 而言。
因此,您的Comparator
应该类似于Comparator<Double>
,而不是Comparator<ArrayList<Double>>
,然后您可以使用它对包括数组的任何Collection
进行模糊排序。
下面是一个工作演示,演示了如何模糊地使用SAME Comparator
来排序List
的自定义对象,以及如何对相同的自定义对象的数组进行排序:
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
public class SortArrayLists {
public static void main(String[] args) {
Comparator<MyObject> comparator = Comparator.comparingDouble(MyObject::getDoubleValue);
MyObject[] array = new MyObject[] {
new MyObject(55),
new MyObject(17.3),
new MyObject(2.43),
new MyObject(375),
new MyObject(100),
new MyObject(255)
};
List<MyObject> list = Arrays.asList(array);
list.sort(comparator);
Arrays.sort(array, comparator);
list.stream().forEach(System.out::println);
System.out.println("\n\n");
Arrays.stream(array).forEach(System.out::println);
}
static class MyObject {
private double doubleValue;
public MyObject(double doubleValue) {
this.doubleValue = doubleValue;
}
public double getDoubleValue() {
return doubleValue;
}
public String toString() {
return doubleValue + "";
}
}
}
希望这会有所帮助。