我有一个列表如下:
List<Data> list = new ArrayList<Data>()
Data {
String status;
String type;
}
从某些服务中我获取的数据如下:
list = ["S","a"],["V","b"],["E","c"];
我需要按状态对列表进行排序,以便 V、S、E 以便我可以将其传递到过滤器以进行进一步处理:
updatedlist = ["V","a"],["E","b"],["S","c"];
我了解使用compareTo我们可以按升序/降序排列如下,但我不需要这个
public int compare(Data d1, Data d2) {
String status1= d1.getStatus();
String status2= d2.getStatus();
//ascending order
return status1.compareTo(status2);
//descending order
//return status2.compareTo(status1);
}
请建议如何实现列表状态顺序为V、E、S。
最佳答案
您可以定义一个指定顺序的列表,然后使用 indexOf
和简单的减法:
private static final List<String> statusOrder = Arrays.asList("V", "S", "E");
public int compare(Data d1, Data d2) {
return statusOrder.indexOf(d1.getStatus()) - statusOrder.indexOf(d2.getStatus());
}
如果状态可能包含列表中没有的值,请小心,因为 indexOf
将返回 -1。您可能应该将 Status
定义为枚举,以便为自己提供更有力的保证。
关于java - java中基于自定义字段值的订单列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51100047/