gpt4 book ai didi

java - 以自定义顺序根据其属性对对象的数组列表进行排序

转载 作者:行者123 更新时间:2023-11-29 09:52:33 24 4
gpt4 key购买 nike

我需要根据自己的 String 属性以自定义顺序(而不是字母顺序)对我的数组列表进行排序。

List<WeekSales> saleList = new ArrayList<>();
...

周销售:

public class WeekSales{

private String day;
private int amount;

// getters setters
...

}

属性 day 始终是星期几。 ("Sunday","Monday", etc...) 所以我需要按照周的顺序对列表的元素进行排序。("Monday", "Tuesday", "Wednesday", "Thursday", "星期五”、“星期六”、“星期日”)

所以我尝试使用 google.common.collect.Ordering。 但它给了我一个错误

Cannot compare value: com.certus.controllers.WeekSales

Comparator<WeekSales> com = Ordering.explicit(new WeekSales("Monday",0), new WeekSales("Tuesday",0), new WeekSales("Wednesday",0), new WeekSales("Thursday",0), new WeekSales("Friday",0), new WeekSales("Saturday",0),new WeekSales("Sunday",0));
saleList.sort(com);

任何帮助都将不胜感激。谢谢。

UPDATE :

question对我的问题没有任何解决方案。我有一个自定义订单。

("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday")

最佳答案

您可以使用 map 来提供帮助。

Map<String, Integer> dayToOrder= new HashMap<>();
for (String day: "Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday".split(","))
dayToOrder.put(day, dayToOrder.size());

对您的 Collection 进行排序

List<WeekSales> saleList = new ArrayList<>();

saleList.sort(Comparator.comparing(ws -> dayToOrder.get(ws.day)));

另一种解决方案是从一开始就使用枚举

enum WeekDay {
Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday;
}

public class WeekSales {

private WeekDay day; // can only be a valid week day
private int amount;

// getters setters
WeekDay getDay() { return day; }
...

}

然后您可以使用 ordinal()

进行排序
 saleList.sort(Comparator.comparing(WeekDay::getDay));

关于java - 以自定义顺序根据其属性对对象的数组列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35270969/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com