java - 根据对象属性对对象数组列表进行排序

标签 java sorting arraylist comparator

我有一个包含属性类对象的列表,在列表中我有 3 个状态

  • 未付款
  • 付费
  • 部分付款

我想按照上述顺序对我的列表进行排序。

首先 - not_paid second-part_paid 第三付

如何使用 Comparator 类对列表进行排序?

public static Comparator<OrderHistoryItemData> COMPARE_BY_PAYMENT = new Comparator<OrderHistoryItemData>() {
    public int compare(OrderHistoryItemData one, OrderHistoryItemData other) {
        String p1 = one.getAttributes().getFieldPaymentStatus();
        String p2 = other.getAttributes().getFieldPaymentStatus();
        if (p1.equals(p2)) {
            return 0;
        }
        if (p1.equals("not_paid") && (p2.equals("part_paid") || p2.equals("not_paid"))) {
            return -1;
        }
        if (p1.equals("not_paid") && p2.equals("not_paid")) {
            return -1;
        }
        return 1;
    }
};

这是我的代码。我使用此代码低于订单。

付费-->未付费-->部分付费

这是我的更新代码。我得到了我的结果。

public static Comparator<OrderHistoryItemData> COMPARE_BY_PAYMENT = new Comparator<OrderHistoryItemData>() {
    public int compare(OrderHistoryItemData one, OrderHistoryItemData other) {
        String p1 = one.getAttributes().getFieldPaymentStatus();
        String p2 = other.getAttributes().getFieldPaymentStatus();
        if (p1.equals(p2)) {
            return 0;
        }
        if (p1.equals("not_paid") && (p2.equals("part_paid") || p2.equals("paid"))) {
            return -1;
        }
        if (p1.equals("part_paid") && p2.equals("paid")) {
            return -1;
        }
        return 1;
    }
};

最佳答案

为了避免复杂的比较器,我鼓励您将您的状态导出到一个enum。 (此外,如果您将来要添加更多状态,而无需更改比较器中的逻辑,这将起作用):

enum PaymentStatus { // Write them in order you want to be sorted
    NOT_PAID,
    PART_PAID,
    PAID
}

那么排序就很简单了:

list.sort(Comparator.comparing(item ->item.getAttributes().getFieldPaymentStatus())); 

关于java - 根据对象属性对对象数组列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52202490/

相关文章:

java - 添加 ArrayList<String> 输入,每个输入都通过枚举引用 double 值

Java 1.7 : Sum of Iterable<T extends Number>

java - 如何在字段上使用 RuleBasedCollat​​or 对 Java 对象列表进行排序?

c - 数组排序和删除重复项

xml - 订购不超过 10 件商品

java - 更改一个数组列表项相对于另一个数组列表项的顺序

c# - 添加到特定索引处的列表

java - 在ubuntu中使用Oracle JDK用包编译java文件

java - 在java中格式化

java - 将此 Apache Rewrite 规则转换为 tuckey URLRewriteRule