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

Mad*_*era 2 java sorting arraylist comparator

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

List<WeekSales> saleList = new ArrayList<>();
...
Run Code Online (Sandbox Code Playgroud)

周销售额:

public class WeekSales{

private String day;
private int amount;

// getters setters
...

}
Run Code Online (Sandbox Code Playgroud)

财产day总是一周中的一天。(“星期日”,“星期一”等...)所以我需要根据星期的顺序对列表的元素进行排序。(“星期一”,“星期二”,“星期三”,“星期四”,“星期五星期六星期天”)

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

无法比较值: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);
Run Code Online (Sandbox Code Playgroud)

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

更新 :

这个问题对我的问题没有任何解决方案。我的情况下有一份定制订单。

("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday")
Run Code Online (Sandbox Code Playgroud)

Pet*_*rey 5

您可以使用地图来提供帮助。

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

对您的收藏进行排序

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

saleList.sort(Comparator.comparing(ws -> dayToOrder.get(ws.day)));
Run Code Online (Sandbox Code Playgroud)

enum另一个解决方案是从一开始就使用 an 。

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; }
    ...

}
Run Code Online (Sandbox Code Playgroud)

然后排序你可以使用ordinal()

 saleList.sort(Comparator.comparing(WeekDay::getDay));
Run Code Online (Sandbox Code Playgroud)