我的列表如下:
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。
答案 0 :(得分:2)
您可以定义一个指定顺序的列表,然后使用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
定义为枚举,以便为自己提供更有力的保证。
答案 1 :(得分:0)
您可以做的是在一个Enum中定义您的状态字符串,然后您就可以对它们进行排序了。
List<Data> data = ...
public enum Status {
V, E, S
}
public class Data {
private Status status;
private String type;
}
data.sort(Comparator.comparing(Data::getStatus));
列表现在[V, b][E, c][S, a]
对于Java6,将排序行替换为
data.sort(new Comparator<Data>() {
@Override
public int compare(Data o1, Data o2) {
return o1.getStatus().compareTo(o2.getStatus());
}
});