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)
您可以使用地图来提供帮助。
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)