按特定参数对对象列表进行排序

时间:2018-10-09 08:41:10

标签: java sorting

我有ArrayList对象,它们具有多个参数。 我需要制作一个按特定参数对列表进行排序的方法。 我的课是:

public class VehicleLoaded {

private int vlrefid;
private int vehicleRefId;
private int load_time;
...

public ELPEVehicleLoaded(){}
}

我需要按其加载时间(升序)对包含此类对象的ArrayList进行排序。 这是我的比较器:

public static Comparator<ELPEVehicleLoaded> RouteLoadingTime = new Comparator<ELPEVehicleLoaded>() 
{
    public int compare(ELPEVehicleLoaded vl1, ELPEVehicleLoaded vl2) {

    int vl1_load_time=vl1.getLoadTime();

    int vl2_load_time=vl2.getLoadTime();
    /*For ascending order*/
    return vl1_load_time-vl2_load_time;
}};

因此,我创建了一个静态方法进行排序:

public static void sortListByLoadTime (ArrayList<VehicleLoaded> VLs){
Collections.sort(VLs, new MyComparator());
}

很抱歉,如果这个问题再次出现,我一直在搜索,但找不到适合我的答案。 提前非常感谢您!

3 个答案:

答案 0 :(得分:1)

public class HelloWorld {
    public static void main(String[] args) {
        List<MyObj> a = Arrays.asList(new MyObj(5), new MyObj(4),new MyObj(3),new MyObj(2), new MyObj(1));

        Collections.sort(a, Comparator.comparingInt(MyObj::getLoadTime));

        System.out.println(a);
    }
}

class MyObj {
    int loadTime;

    public MyObj(int loadTime) {
        this.loadTime = loadTime;
    }

    public int getLoadTime() {
        return loadTime;
    }

    @Override
    public String toString() {
        return "" + loadTime;
    }
}

其输出将是:

  

[1、2、3、4、5]

因此,对于您来说,您需要添加到sortListByLoadTime方法中的所有内容是:

Collections.sort(VLs, Comparator.comparingInt(ELPEVehicleLoaded::getLoadTime));

在我们谈论ArrayList时,应该使用其排序方法,而不要使用Collections :: sort。在我给出的示例中,它将像:

Collections.sort(VLs, Comparator.comparingInt(ELPEVehicleLoaded::getLoadTime));
->
VLs.sort(Comparator.comparingInt(ELPEVehicleLoaded::getLoadTime));

答案 1 :(得分:1)

您可以在函数comparator中使用sortListByLoadTime,如下所示:

VLs.sort((o1,o2) -> o1.getLoadTime() - o2.getLoadTime());

或者您可以使用Collections utility,如下所示:

Collections.sort(VLs, ( o1,  o2) -> {
      return o1.getLoadTime() - o2.getLoadTime();
});

lambda expression可以用method reference替换,如下所示:

Collections.sort(VLs, Comparator.comparing(VehicleLoaded::getLoadTime));

答案 2 :(得分:1)

您可以尝试使用Java 8:

request.body