Java实用工具类-根据当前weekday返回分段排序的周一至周日详解编程语言

需求

在这里插入图片描述
如图所示,当:
weekday = 1时,返回Set:[1, 2, 3, 4, 5, 6, 7]
weekday = 2时,返回Set:[2, 3, 4, 5, 6, 7, 1]
weekday = 3时,返回Set:[3, 4, 5, 6, 7, 1, 2]
weekday = 4时,返回Set:[4, 5, 6, 7, 1, 2, 3]
weekday = 5时,返回Set:[5, 6, 7, 1, 2, 3, 4]
weekday = 6时,返回Set:[6, 7, 1, 2, 3, 4, 5]
weekday = 7时,返回Set:[7, 1, 2, 3, 4, 5, 6]

注意

本文的传参时String类型的weekday,如果是Integer则更简单,还省略了字符串和整型相互转换的过程。

代码

工具类WeekdaySortUtils

package com.jake.sort.utils; 
 
import java.util.HashSet; 
import java.util.LinkedHashSet; 
import java.util.Set; 
 
public class WeekdaySortUtils { 
 
    public static Set<String> getOrderedWeekdaysByCurrent(String weekdayStr) { 
        Set<String> weekdays = new LinkedHashSet<>(); 
        int weekday = Integer.valueOf(weekdayStr); 
        if (weekday < 1 || weekday > 7) { 
            throw new RuntimeException("weekday should be between 1 to 7"); 
        } 
 
        weekdays.addAll(getWeekdaysAhead(weekday)); 
        weekdays.addAll(getWeekdaysRear(weekday)); 
 
        return weekdays; 
    } 
 
    private static Set<String> getWeekdaysRear(int weekday) { 
        Set<String> weekdaysAfter = new HashSet<>(); 
        for (int i = 1; i < weekday; i++) { 
            weekdaysAfter.add(String.valueOf(i)); 
        } 
        return weekdaysAfter; 
    } 
 
    private static Set<String> getWeekdaysAhead(int weekday) { 
        Set<String> weekdaysAhead = new HashSet<>(); 
        for (int i = weekday; i < 8; i++) { 
            weekdaysAhead.add(String.valueOf(i)); 
        } 
        return weekdaysAhead; 
    } 
 
} 

注意:

  1. 返回的Set集合要使用LinkedHashSet,才能保持其中元素按照调用addAll(collection)或add(element)方法的先后顺序排序,如果使用HashSet,可能是无序的;而如果使用TreeSet,可能是按照元素大小排序。
  2. 当weekday不在1 – 7的范围内时,抛出一个RuntimeException提示。

单元测试类WeekdaySortUtilsTest

package com.jake.sort.utils; 
 
import org.junit.Test; 
 
public class WeekdaySortUtilsTest { 
 
    @Test 
    public void getOrderedWeekdaysByCurrent() { 
        for (int i = 1; i < 10; i++) { 
            System.out.println(WeekdaySortUtils.getOrderedWeekdaysByCurrent(String.valueOf(i))); 
        } 
    } 
 
} 

单元测试结果

[1, 2, 3, 4, 5, 6, 7] 
[2, 3, 4, 5, 6, 7, 1] 
[3, 4, 5, 6, 7, 1, 2] 
[4, 5, 6, 7, 1, 2, 3] 
[5, 6, 7, 1, 2, 3, 4] 
[6, 7, 1, 2, 3, 4, 5] 
[7, 1, 2, 3, 4, 5, 6] 
 
java.lang.RuntimeException: weekday should be between 1 to 7 
 
	at com.jake.sort.utils.WeekdaySortUtils.getOrderedWeekdaysByCurrent(WeekdaySortUtils.java:13) 
	at com.jake.sort.utils.WeekdaySortUtilsTest.getOrderedWeekdaysByCurrent(WeekdaySortUtilsTest.java:10) 
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
	at java.lang.reflect.Method.invoke(Method.java:498) 
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) 
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) 
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) 
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) 
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) 
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
	at org.junit.runner.JUnitCore.run(JUnitCore.java:137) 
	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68) 
	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47) 
	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242) 
	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70) 
 
 
Process finished with exit code -1 

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/19609.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论