Java中基于自定义字段值的订单列表

时间:2018-06-29 10:51:00

标签: java comparator java-6

我的列表如下:

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。

2 个答案:

答案 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());
            }
        });