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 的付款都位于列表的顶部,其他订单保持不变。
如果没有什么与变量 currency 相等,则按默认值排序,例如USD。
我知道这可以通过其他方法来完成,但这是一种挑战,有人可以帮我解决我从第一部分开始所缺少的东西吗?
答案 0 :(得分:1)
您需要具有自定义比较器逻辑,才能首先使用currency = EUR
对对象进行排序,然后使用自然排序顺序对其余对象进行排序
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]]
答案 1 :(得分:0)
如果您只是想让排序功能对您有用,那么您的比较器可以为欧元货币返回负值,使其在排序顺序中处于最低位置,并将所有其他位置均等。如果要在欧元货币对象中维持订单,则必须对此进行进一步扩展。
list.sort((o1, o2) -> o1.currency.equals("EUR") ? -1 : 0);