У меня есть список строк, содержащих имя дня недели, время начала и время окончания в следующем формате:
Wednesday 13:00 to 14:30
Saturday 14:20 to 18:10
Monday 09:00 to 14:25
Saturday 11:00 to 12:30
Sunday 08:00 to 14:25
Мне нужно, чтобы это было отсортировано в следующем порядке
Monday 09:00 to 14:25
Wednesday 13:00 to 14:30
Saturday 11:00 to 12:30
Saturday 14:20 to 18:10
Sunday 08:00 to 14:25
Мне нужно было отсортировать этот список таким образом, чтобы день недели находился в порядке возрастания, начиная с понедельника.И если есть несколько записей с одним и тем же днем недели, то время начала также должно быть в порядке возрастания.Другие примеры дают Sun в качестве первого элемента в отсортированном списке, но мне нужно Mon в качестве первого элемента
Это код, который я использовал до сих пор, используя класс Comparator, который выплевывает 'Sun' в верхней части списка:
public int solution(String inputStr) {
String [] timeArray = inputStr.split(System.getProperty("line.separator"));
//List<String> list = inputStr.split(System.getProperty("line.separator"));
Arrays.sort(timeArray);
for (String str: timeArray) {
System.out.println(str);
}
Comparator<String> dateComparator = new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
try{
SimpleDateFormat format = new SimpleDateFormat("EEE");
Date d1 = format.parse(s1);
Date d2 = format.parse(s2);
if(d1.equals(d2)){
return s1.substring(s1.indexOf(" ") + 1).compareTo(s2.substring(s2.indexOf(" ") + 1));
}else{
Calendar cal1 = Calendar.getInstance(new Locale("en", "UK"));
Calendar cal2 = Calendar.getInstance(new Locale("en", "UK"));
//Calendar cal2 = Calendar.getInstance();
// cal1.setFirstDayOfWeek(Calendar.MONDAY);
// cal1.setFirstDayOfWeek(Calendar.MONDAY);
//cal2.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
cal1.setTime(d1);
cal2.setTime(d2);
return cal1.get(Calendar.DAY_OF_WEEK) - cal2.get(Calendar.DAY_OF_WEEK);
}
}catch(ParseException pe){
throw new RuntimeException(pe);
}
}
};
ArrayList<String> arrList = new ArrayList<String>(Arrays.asList(timeArray));
ArrayList<Long> arrSlots = new ArrayList<Long>();
Collections.sort(arrList, dateComparator);
System.out.println(arrList);
Кто-нибудь может предложить лучший способ сделать это?
Спасибо