Java 基于特定元素的排序数组

Java 基于特定元素的排序数组,java,arrays,sorting,Java,Arrays,Sorting,所以我有一个对象列表,特别是一个车辆列表,包含汽车、摩托车和自行车。这些物体中的每一个都有不同的前庭(例如,汽车和摩托车有最大速度,而自行车没有) Moto Bicicle和Car是Vehicle的子类,Vehicle实现了可比较的接口 它们有一个共同点,就是它们制作的年份,这就是我想使用特定属性对数组进行排序的方式。默认情况下,java基于对象的另一个共同属性“颜色”进行排序 这是用于对数组进行排序的代码。(必须是此代码) publicstaticvoidsortarray(可比[]a){ 数

所以我有一个对象列表,特别是一个车辆列表,包含汽车、摩托车和自行车。这些物体中的每一个都有不同的前庭(例如,汽车和摩托车有最大速度,而自行车没有)

Moto Bicicle和Car是Vehicle的子类,Vehicle实现了可比较的接口

它们有一个共同点,就是它们制作的年份,这就是我想使用特定属性对数组进行排序的方式。默认情况下,java基于对象的另一个共同属性“颜色”进行排序

这是用于对数组进行排序的代码。(必须是此代码)

publicstaticvoidsortarray(可比[]a){
数组。排序(a);
}
有没有办法选择我想用来对列表排序的属性?
提前感谢您的帮助。

默认情况下
数组。排序
根据其元素的
可比自然排序
进行排序。如果您想更改它,请使用
Arrays.sort(T[]a,Comparator您可以实现自己的比较器,并将其传递给
Arrays.sort(array,Comparator)
。使用lambdas或method处理此问题很简单:

Vehicle[] v = ...
Arrays.sort(v, (v1,v2) -> v1.getYear() - v2.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));
}   

对于您的文本,我认为Cars、Motos和biciles是Vehicle的子类,该Vehicle实现了Comparable接口。最后一点意味着Vehicle有一个compareTo方法。将该方法更改为使用“year”而不是“color”根据第3点的链接,你可以找到一个例子来说明我在之前的评论中的意思哦,它工作得很好^^非常感谢:D它现在确实有意义xD。谢谢。
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);