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
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值