根据特定值对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]