dev_mg99:
Eu tenho a lista que contém um objeto de classe propriedade, na lista eu tenho 3 estatuto
- não pago
- pago
- part_paid
Quero classificar o meu lista abaixo ordem mencionada.
Primeiro - not_paid segunda part_paid terceiro -paid
Como eu posso classificar meu lista usando Comparator
classe.?
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;
}
};
Este é o meu código. Estou recebendo a seguir a fim de usar este código.
pago -> not_paid -> part_paid
Este é o meu Código Update. Eu tenho o meu resultado.
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;
}
};
Schidu Lucas:
Para evitar comparador complexo, encorajo-vos a exportar seus status a um enum
. (Além disso, isso vai funcionar se você vai adicionar mais estados no futuro, sem a necessidade de lógica mudança no seu comparador):
enum PaymentStatus { // Write them in order you want to be sorted
NOT_PAID,
PART_PAID,
PAID
}
Em seguida, a classificação vai ser tão simples como:
list.sort(Comparator.comparing(item ->item.getAttributes().getFieldPaymentStatus()));