所以我有一个对象列表,特别是车辆列表,其中包含汽车,摩托车和汽车。这些物体中的每一个都具有不同的属性(例如,汽车和摩托车具有最大速度,而不是双曲线。)
Moto Bicicle和Car是Vehicle和Vehicle的子类,实现了Comparable接口。
他们确实有共同点,制作它们的那一年,这就是我想要使用该特定属性对数组进行排序的方式。默认情况下,java基于对象具有的另一个属性进行排序,即“颜色”。
这是用于对数组进行排序的代码。(必须是这个)
public static <T> void sortArray(Comparable<T>[] a) {
Arrays.sort(a);
}
有没有办法选择我想用来对列表进行排序的属性? 感谢您的帮助。
答案 0 :(得分:1)
默认情况下Arrays.sort
根据其元素的Comparable natural ordering
进行排序。如果要更改它,请改用Arrays.sort(T[] a, Comparator<? super T> c)
,它允许定义自己的比较器。
http://docs.oracle.com/javase/6/docs/api/java/util/Arrays.html#sort(T[],java.util.Comparator)
答案 1 :(得分:1)
您可以实现自己的比较器并将其传递给Arrays.sort(array, comparator)
。使用lambdas或方法句柄很容易:
Vehicle[] v = ...
Arrays.sort(v, (v1,v2) -> v1.getYear() - v2.getYear());
或
Arrays.sort(v, Comparator.comparing(Vehicle::getYear));
基于此,您可以编写一个通用函数,该函数按特定属性对数组进行排序:
public static <T, U extends Comparable<? super U>> void sortArray(T[] a,
Function<? super T, ? extends U> attribute) {
Arrays.sort(a, Comparator.comparing(attribute));
}
并将其与
一起使用sortArray(v, Vehicle::getYear);