簡體   English   中英

比較器首先對匹配的字符串進行排序,rest 使用默認排序順序

[英]Comparator sort matching String at first, and rest using default sorting order

String currency = EUR;

List<Payment> payments = #has payments, with one field being Currency;

//This is not it:
payments.sort(Comparator.comparing(o -> o.getCurrency().equals(currency));

我希望所有貨幣等於可變貨幣的付款在我的情況下歐元位於列表的頂部,其他訂單保持不變。

如果沒有任何東西與可變貨幣相等,則按默認值排序,例如美元。

我知道這可以通過其他方式完成,但這是一個挑戰,有人可以幫忙,我在第一部分中缺少的東西,按平等排序。

您需要有自定義比較器邏輯,首先使用currency = EUR對 object 進行排序,然后使用自然排序順序對其中的 rest 進行排序

List<Payment> list = new ArrayList<>(List.of(new Payment("EUR"),new Payment("EUR"),new Payment("AUS"),new Payment("INR"),new Payment("INR")));



    list.sort((c1,c2)->{

        if (c1.getCurrency().equals("EUR")) {
            return c2.getCurrency().equals("EUR") ? 0 : -1;
        }
        if (c2.getCurrency().equals("EUR")) {
            return 1;
        }
        return c1.getCurrency().compareTo(c2.getCurrency());

    });

    System.out.println(list);  //[Payment [currency=EUR], Payment [currency=EUR], Payment [currency=AUS], Payment [currency=INR], Payment [currency=INR]]

如果您只是想讓 function 排序為您工作,那么您的比較器可以為您的歐元貨幣返回一個負值,使其在您的排序順序中為最低 position,並平等對待所有其他貨幣。 如果您想在您的歐元貨幣對象中維持秩序,您將不得不進一步擴展。

list.sort((o1, o2) -> o1.currency.equals("EUR") ? -1 : 0);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM