gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:44:16 26 4
gpt4 key购买 nike

我有一个包含属性类对象的列表,在列表中我有 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com