lista de matriz tipo de objetos com base em atributos de objeto

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 Comparatorclasse.?

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())); 

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=197117&siteId=1
Recomendado
Clasificación