dev*_*g99 3 java sorting arraylist comparator
我有包含属性类对象的列表,在列表中我有3个状态
我想按下面提到的顺序对我的列表进行排序.
首先 - not_paid second-part_paid third -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;
}
};
Run Code Online (Sandbox Code Playgroud)
这是我的代码.我使用此代码获得低于订单.
支付 - > not_paid - > part_paid
这是我的更新代码.我得到了我的结果.
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;
}
};
Run Code Online (Sandbox Code Playgroud)
为避免复杂的比较,我鼓励您将状态导出到enum.(如果您将来添加更多状态,而不需要更改比较器中的逻辑),这将起作用:
enum PaymentStatus { // Write them in order you want to be sorted
NOT_PAID,
PART_PAID,
PAID
}
Run Code Online (Sandbox Code Playgroud)
然后排序将如下所示:
list.sort(Comparator.comparing(item ->item.getAttributes().getFieldPaymentStatus()));
Run Code Online (Sandbox Code Playgroud)