繁体   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