加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java – 按时间排序数组

发布时间:2020-12-15 05:10:55 所属栏目:Java 来源:网络整理
导读:第一:我使用数组来获取这样的信息: // Tuesdayarray[2][1] = "tuesday";array[2][2] = "20:00";// Wednesday array[3][1] = "Wednesday";array[3][2] = "15:00";// Thursday array[4][1] = "Thursday";array[4][2] = "20:00";// Fridayarray[5][1] = "Frid
第一:我使用数组来获取这样的信息:

// Tuesday
array[2][1] = "tuesday";
array[2][2] = "20:00";

// Wednesday 
array[3][1] = "Wednesday";
array[3][2] = "15:00";

// Thursday 
array[4][1] = "Thursday";
array[4][2] = "20:00";

// Friday
array[5][1] = "Friday";
array[5][2] = "18:00";

// Saturday
array[6][1] = "Saturday";
array[6][2] = "15:00";

// Sunday
array[7][1] = "Sunday";
array[7][2] = "15:00";

如何按实际时间和工作日对数组进行排序?
示例:现在是星期三 – 11:13.第一个Array-Item将是数组[3],然后是4,5,6,7,然后是2.

非常感谢你.

解决方法

这里的其他答案很好,但使用过时的类.

java.time

在Java 8及更高版本中,我们现在内置了java.time框架(带有Java 6& 7和Android的后端口).与旧的日期时间类相比有了很大的改进.

java.time类包含一对符合您确切需求的类:

> DayOfWeekA方便enum代表每周七天的每一天,由ISO 8601标准定义,从周一到周日.
> LocalTime表示没有日期且没有时区的时间.

预先定义了这些类型,您甚至不需要像其他注释和答案所建议的那样定义自己的类.至少如果您对日期排序的定义在周一至周日进行. DayOfWeek枚举按此顺序预定了几周的天数.如果你的更大的项目有意义,你可以组建DayOfWeek和LocalTime自己的类.

Java enums非常方便,灵活,功能强大(所以learn more如果他们对你不熟悉的话).枚举有自己的特殊实现SetMap,恰当地命名为EnumSetEnumMap.我们可以使用EnumMap跟踪一周中的每一天,将其映射到时间(LocalTime对象).

EnumMap<DayOfWeek,LocalTime> dayToTimeMap = new EnumMap<> ( DayOfWeek.class );

dayToTimeMap.put ( DayOfWeek.TUESDAY,LocalTime.parse ( "20:00" ) );
dayToTimeMap.put ( DayOfWeek.WEDNESDAY,LocalTime.of ( 15,0 ) );
dayToTimeMap.put ( DayOfWeek.THURSDAY,LocalTime.parse ( "20:00" ) );
dayToTimeMap.put ( DayOfWeek.FRIDAY,LocalTime.parse ( "18:00" ) );
dayToTimeMap.put ( DayOfWeek.SATURDAY,LocalTime.parse ( "15:00" ) );

获取当前的星期几和时间.

DayOfWeek today = DayOfWeek.WEDNESDAY;
LocalTime now = LocalTime.of ( 11,13 );

制作一对空集,以跟踪与现在相同或晚于现在的日期,以及跟踪较早日期的日期.作为EnumSet,它们的自然顺序是在DayOfWeek枚举(周一至周日,1-7)中声明的顺序.

EnumSet<DayOfWeek> earlier = EnumSet.noneOf ( DayOfWeek.class );
EnumSet<DayOfWeek> later = EnumSet.noneOf ( DayOfWeek.class );

循环DayOfWeek到LocalTime地图.查看DayOfWeek是否在今天之前,等于或晚于今天.如果等于今天,则将其LocalTime对象与我们现在的对象进行比较.将此DayOfWeek对象分配给较早的集或较晚的集.

for ( Map.Entry<DayOfWeek,LocalTime> entry : dayToTimeMap.entrySet () ) {
    DayOfWeek key = entry.getKey ();
    LocalTime value = entry.getValue ();
    int comparison = key.compareTo ( today );
    if ( comparison < 0 ) { // if earlier day…
        earlier.add ( key );
    } else if ( comparison == 0 ) { //If same day…
        if ( value.isBefore ( now ) ) {
            earlier.add ( key );
        } else {  // Else same time as now or later than now…
            later.add ( key );
        }
    } else if ( comparison > 0 ) {
        later.add ( key );
    } else {
        throw new RuntimeException ( "Unexpectedly reached IF-ELSE for comparison: " + comparison );
    }
}

转储到控制台.我们希望首先循环后面的集合,然后根据问题中列出的要求循环先前的集合.

System.out.println ( "dayToStringMap: " + dayToTimeMap );
System.out.println ( "sorted by today: " + today + " " + now + " is: " );
for ( DayOfWeek dayOfWeek : later ) {
    LocalTime localTime = dayToTimeMap.get ( dayOfWeek );
    System.out.println ( dayOfWeek + " " + localTime );
}
for ( DayOfWeek dayOfWeek : earlier ) {
    LocalTime localTime = dayToTimeMap.get ( dayOfWeek );
    System.out.println ( dayOfWeek + " " + localTime );
}

跑步时

dayToStringMap: {TUESDAY=20:00,WEDNESDAY=15:00,THURSDAY=20:00,FRIDAY=18:00,SATURDAY=15:00}
sorted by today: WEDNESDAY 11:13 is: 
WEDNESDAY 15:00
THURSDAY 20:00
FRIDAY 18:00
SATURDAY 15:00
TUESDAY 20:00

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读