Java 如何按升序对包含星期几名称的字符串进行排序

Java 如何按升序对包含星期几名称的字符串进行排序,java,android,sorting,arraylist,Java,Android,Sorting,Arraylist,我有一个字符串列表,其中包含星期几名称、开始时间和结束时间: List<String> eventList = Database.getEventsForThisWeek(); 我想以这样的方式对列表进行排序,以便一周中的某一天按升序排列。如果一周中的同一天有多个记录,那么开始时间也应该按升序排列 例如,排序后,上面的列表应该如下所示: Monday (09:00 to 14:25) Thursday (13:00 to 14:30) Saturday (11:00 to

我有一个字符串列表,其中包含星期几名称、开始时间和结束时间:

List<String> eventList = Database.getEventsForThisWeek();
我想以这样的方式对列表进行排序,以便一周中的某一天按升序排列。如果一周中的同一天有多个记录,那么开始时间也应该按升序排列

例如,排序后,上面的列表应该如下所示:

Monday (09:00 to 14:25)    
Thursday (13:00 to 14:30)
Saturday (11:00 to 12:30)
Saturday (14:20 to 18:10)
对列表排序的最佳方式是什么?

给您:

List<String> dates = Arrays.asList(new String[]{
        "Thursday (13:00 to 14:30)",
        "Saturday (14:20 to 18:10)",
        "Monday (09:00 to 14:25)",
        "Saturday (11:00 to 12:30)"
});
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();
                Calendar cal2 = Calendar.getInstance();
                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);
        }
    }
};
Collections.sort(dates, dateComparator);
System.out.println(dates);
List dates=Arrays.asList(新字符串[]){
“星期四(13:00至14:30)”,
“星期六(14:20至18:10)”,
“星期一(09:00至14:25)”,
“星期六(11:00至12:30)”
});
比较器dateComparator=新比较器(){
@凌驾
公共整数比较(字符串s1、字符串s2){
试一试{
SimpleDataFormat格式=新的SimpleDataFormat(“EEE”);
日期d1=format.parse(s1);
Date d2=format.parse(s2);
如果(d1等于(d2)){
返回s1.substring(s1.indexOf(“”+1)。compareTo(s2.substring(s2.indexOf(“”+1));
}否则{
Calendar cal1=Calendar.getInstance();
Calendar cal2=Calendar.getInstance();
cal1.设定时间(d1);
cal2.设定时间(d2);
返回cal1.get(Calendar.DAY\u OF_WEEK)-cal2.get(Calendar.DAY\u OF_WEEK);
}
}捕获(解析异常pe){
抛出新的运行时异常(pe);
}
}
};
集合。排序(日期、日期比较符);
系统输出打印项次(日期);
给你:

List<String> dates = Arrays.asList(new String[]{
        "Thursday (13:00 to 14:30)",
        "Saturday (14:20 to 18:10)",
        "Monday (09:00 to 14:25)",
        "Saturday (11:00 to 12:30)"
});
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();
                Calendar cal2 = Calendar.getInstance();
                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);
        }
    }
};
Collections.sort(dates, dateComparator);
System.out.println(dates);
List dates=Arrays.asList(新字符串[]){
“星期四(13:00至14:30)”,
“星期六(14:20至18:10)”,
“星期一(09:00至14:25)”,
“星期六(11:00至12:30)”
});
比较器dateComparator=新比较器(){
@凌驾
公共整数比较(字符串s1、字符串s2){
试一试{
SimpleDataFormat格式=新的SimpleDataFormat(“EEE”);
日期d1=format.parse(s1);
Date d2=format.parse(s2);
如果(d1等于(d2)){
返回s1.substring(s1.indexOf(“”+1)。compareTo(s2.substring(s2.indexOf(“”+1));
}否则{
Calendar cal1=Calendar.getInstance();
Calendar cal2=Calendar.getInstance();
cal1.设定时间(d1);
cal2.设定时间(d2);
返回cal1.get(Calendar.DAY\u OF_WEEK)-cal2.get(Calendar.DAY\u OF_WEEK);
}
}捕获(解析异常pe){
抛出新的运行时异常(pe);
}
}
};
集合。排序(日期、日期比较符);
系统输出打印项次(日期);

Hi Darshan,如果您能将周一作为一周的第一天而不是周日提供上述代码,我将不胜感激。Hi Darshan,如果您能将周一作为一周的第一天而不是周日提供上述代码,我将不胜感激?