有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java根据元素的自然顺序对列表进行排序

我想要以下代码的降序排序类型:

这是升序排序:

public static <T extends Vm> void sortByCpuUtilization(List<T> vmList) {
    Collections.sort(vmList, new Comparator<T>() {

        @Override
        public int compare(T a, T b) throws ClassCastException {
            Double aUtilization = a.getTotalUtilizationOfCpuMips(CloudSim.clock());
            Double bUtilization = b.getTotalUtilizationOfCpuMips(CloudSim.clock());
            return bUtilization.compareTo(aUtilization);
        }
    });
}

共 (2) 个答案

  1. # 1 楼答案

    有几种方法可以做到这一点。首先,您可以实现一个反向比较器:

    public static <T extends Vm> void sortByCpuUtilizationDesc(List<T> vmList) {
        Collections.sort(vmList, new Comparator<T>() {
    
            @Override
            public int compare(T a, T b) throws ClassCastException {
                Double aUtilization = a.getTotalUtilizationOfCpuMips(CloudSim.clock());
                Double bUtilization = b.getTotalUtilizationOfCpuMips(CloudSim.clock());
                return aUtilization.compareTo(bUtilization); // Note this is reversed
            }
        });
    }
    

    但更优雅的是,您可以使用^{}

    public static <T extends Vm> void sortByCpuUtilizationDesc(List<T> vmList) {
        // Same comparator as before, should be extracted to a named class.
        Collections.sort(vmList, Collections.reverseOrder(new Comparator<T>() {
    
            @Override
            public int compare(T a, T b) throws ClassCastException {
                Double aUtilization = a.getTotalUtilizationOfCpuMips(CloudSim.clock());
                Double bUtilization = b.getTotalUtilizationOfCpuMips(CloudSim.clock());
                return aUtilization.compareTo(bUtilization); // Note this is reversed
            }
        }));
    }
    
  2. # 2 楼答案

    将a与b进行比较:

    public static <T extends Vm> void sortByCpuUtilization(List<T> vmList) {
        Collections.sort(vmList, new Comparator<T>() {
    
            @Override
            public int compare(T a, T b) throws ClassCastException {
                Double aUtilization = a.getTotalUtilizationOfCpuMips(CloudSim.clock());
                Double bUtilization = b.getTotalUtilizationOfCpuMips(CloudSim.clock());
                return aUtilization.compareTo(bUtilization);
            }
        });
    }