gpt4 book ai didi

java - 按特定顺序对列表列表进行排序

转载 作者:行者123 更新时间:2023-11-30 07:01:55 24 4
gpt4 key购买 nike

这个问题是关于列表排序的。

我有一个获取车辆的通用方法

List<Vehicle>  getRandomVehiclesList() {    
return fetchVehicles();
//returns List <Car>, List<Bus>, etc
};

车辆可以是汽车、摩托车、公共(public)汽车、卡车、SUV 等。

Car extends Vehicle
Bus extends Vehicle

假设我想调用 5 次 getRandomVehiclesList(),然后按特定顺序对结果 5 个列表进行排序。

————————————————————————————————————

列表需要按此顺序

List<Car>
List<Truck>
List<SUV>
List<Bus>
List<Motorcycle>

————————————————————————————————————

但结果可以按此顺序或其他随机顺序返回。

List<Bus>
List<Motorcycle>
List<Truck>
List<Car>
List<SUV>

对所有列表进行排序的最佳方式是什么,以便它们与上面显示的顺序匹配(汽车、卡车、SUV、公共(public)汽车、摩托车)

可以用RxJava来简化吗?

最佳答案

您可以轻松创建自己的 Comparator<List<Vehicle>>利用 Guava 的Ordering.explicit比较器:

class VehicleListComparator implements Comparator<List<Vehicle>> {
private final Ordering<Class<? extends Vehicle>> vehicleClassOrdering;

public VehicleListComparator(Ordering<Class<? extends Vehicle>> vehicleClassOrdering) {
this.vehicleClassOrdering = vehicleClassOrdering;
}

@Override
public int compare(List<Vehicle> vehiclesList1, List<Vehicle> vehiclesList2) {
Class<? extends Vehicle> left = getVehicleClass(vehiclesList1);
Class<? extends Vehicle> right = getVehicleClass(vehiclesList2);
return vehicleClassOrdering.compare(left, right);
}

private Class<? extends Vehicle> getVehicleClass(List<Vehicle> vehicleList) {
if (vehicleList.isEmpty()) {
throw new IllegalArgumentException();
} else {
return vehicleList.get(0).getClass();
}
}
}

然后您可以使用此比较器对车辆列表进行排序:

Ordering<Class<? extends Vehicle>> vehicleClassOrdering = Ordering.explicit(Arrays.asList(
Car.class, Truck.class, SUV.class, Bus.class, Motorcycle.class));
Collections.sort(vehicleLists, new VehicleListComparator(vehicleClassOrdering));

关于java - 按特定顺序对列表列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40774656/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com