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

标签 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。

最佳答案

您可以定义一个指定顺序的列表,然后使用 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/

相关文章:

java - 使用 ExampleMatcher 和 Pageable 检索数据的 JPQL 自定义查询

java - 从java执行多个命令shell

java - 马尔可夫链的比较器和 HashMap

java - JDK 1.6 中的@override 注解

java - 如何让内部类继承封闭类的泛型类型?

tomcat - 严重 : Null component Catalina:type=JspMonitor, name=jsp,WebModule=//localhost/myproject,J2EEApplication=none,J2EEServer=none

java - jackson 不承认属性(property)

java - java中特殊字母转ascii字母

java - 排序 List<Object> 以日期为字符串类型的日期为准

java - 树集构造函数