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