根据特定值对ArrayList<DayOfWeek>进行排序

我有一个ArrayList<DayOfWeek>让我们说["MONDAY","WEDNESDAY","FRIDAY"]

我的目标是以DayOfTheWeek循环方式基于 a 对其进行排序。

输入: "WEDNESDAY"

排序列表: ["WEDNESDAY","FRIDAY","MONDAY"]

该列表保证从周一到周日排序。不能保证输入日期在列表中,在这种情况下,排序从列表中的下一个值开始。

回答

我建议使用类似于此的方法:

如何在java中将数组值排序为循环格式?

每个DayOfWeek都有自己的 ID 编号,对应于其在排序中的预期位置,因此您可以围绕这些编号旋转。


回答

Collections#rotate

演示:

import java.time.DayOfWeek;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<DayOfWeek> list = new ArrayList<>(List.of(DayOfWeek.MONDAY, DayOfWeek.TUESDAY, DayOfWeek.WEDNESDAY,
                DayOfWeek.THURSDAY, DayOfWeek.FRIDAY, DayOfWeek.SUNDAY));

        Collections.rotate(list, list.size() - list.indexOf(DayOfWeek.WEDNESDAY));

        System.out.println(list);
    }
}

输出:

[WEDNESDAY, THURSDAY, FRIDAY, SUNDAY, MONDAY, TUESDAY]

交互的:

import java.time.DayOfWeek;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        List<DayOfWeek> list = new ArrayList<>(List.of(DayOfWeek.MONDAY, DayOfWeek.TUESDAY, DayOfWeek.WEDNESDAY,
                DayOfWeek.THURSDAY, DayOfWeek.FRIDAY, DayOfWeek.SUNDAY));

        Scanner scanner = new Scanner(System.in);
        System.out.print("Enter the day: ");
        String day = scanner.nextLine();

        try {
            Collections.rotate(list, list.size() - list.indexOf(DayOfWeek.valueOf(day.toUpperCase())));
            System.out.println(list);
        } catch (IllegalArgumentException e) {
            System.out.println("Invalid input");
        }
    }
}

示例运行:

Enter the day: wednesday
[WEDNESDAY, THURSDAY, FRIDAY, SUNDAY, MONDAY, TUESDAY]


以上是根据特定值对ArrayList&lt;DayOfWeek&gt;进行排序的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>