需求
如图所示,当:
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;
}
}
注意:
- 返回的Set集合要使用LinkedHashSet,才能保持其中元素按照调用addAll(collection)或add(element)方法的先后顺序排序,如果使用HashSet,可能是无序的;而如果使用TreeSet,可能是按照元素大小排序。
- 当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