Java 订购ArrayList<;星期一>;基于特定值
我有一个Java 订购ArrayList<;星期一>;基于特定值,java,arraylist,rotation,java-time,dayofweek,Java,Arraylist,Rotation,Java Time,Dayofweek,我有一个ArrayList比方说[“周一”、“周三”、“周五”] 我的目标是根据每周的dayofweek循环订购 输入:“星期三” 分类列表:[“星期三”、“星期五”、“星期一”] 名单保证从周一到周日排序。输入日期不保证在列表中,在这种情况下,排序从列表中的下一个值开始。我建议使用类似的方法: 其中每个DayOfWeek都有自己的ID号,对应于其在订购中的预期位置,因此您可以围绕这些编号旋转。我建议使用类似于此的方法: 其中,每个DayOfWeek都有自己的ID号,对应于其在订购中的预期位
ArrayList
比方说[“周一”、“周三”、“周五”]
我的目标是根据每周的dayofweek
循环订购
输入:“星期三”
分类列表:[“星期三”、“星期五”、“星期一”]
名单保证从周一到周日排序。输入日期不保证在列表中,在这种情况下,排序从列表中的下一个值开始。我建议使用类似的方法:
其中每个
DayOfWeek
都有自己的ID号,对应于其在订购中的预期位置,因此您可以围绕这些编号旋转。我建议使用类似于此的方法:
其中,每个DayOfWeek
都有自己的ID号,对应于其在订购中的预期位置,因此您可以围绕这些编号旋转
演示:
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]
交互式:
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]
演示:
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]
交互式:
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]
其他答案已经给出了正确的想法:使用
Collections.rotate()
。这只是为了考虑评论中的信息:
名单保证从周一到周日排序。这个 输入日期不保证在列表中,在这种情况下 排序从列表中的下一个值开始
ArrayList list=新的ArrayList(list.of(
星期一、星期一、星期三、星期五);
DayOfWeek输入=DayOfWeek.周二;
int indexOfDesiredFirstDay=Collections.binarySearch(列表,输入);
如果(indexOfDesiredFirstDay<0){
indexOfDesiredFirstDay=-indexOfDesiredFirstDay-1;
}
集合。旋转(列表,-indexOfDesiredFirstDay);
系统输出打印项次(列表);
本例中的输出:
[星期三、星期五、星期一]
因为列表的长度永远不会超过7个元素,所以我们不需要二进制搜索的效率,但是
Collections.binarySearch()
仍然是一种方便的方法,用于查找在旋转后我们希望排在第一位的元素的索引rotate()
接受负的旋转量,因此我们只需对索引求反(反转符号)并将其传递给该方法。计算出的索引可能超出了列表的末尾,但是rotate()
也可以处理这个问题,所以这没问题。其他答案已经给出了正确的想法:使用Collections.rotate()
。这只是为了考虑评论中的信息:
名单保证从周一到周日排序。这个 输入日期不保证在列表中,在这种情况下 排序从列表中的下一个值开始
ArrayList list=新的ArrayList(list.of(
星期一、星期一、星期三、星期五);
DayOfWeek输入=DayOfWeek.周二;
int indexOfDesiredFirstDay=Collections.binarySearch(列表,输入);
如果(indexOfDesiredFirstDay<0){
indexOfDesiredFirstDay=-indexOfDesiredFirstDay-1;
}
集合。旋转(列表,-indexOfDesiredFirstDay);
系统输出打印项次(列表);
本例中的输出:
[星期三、星期五、星期一]
因为列表的长度永远不会超过7个元素,所以我们不需要二进制搜索的效率,但是
Collections.binarySearch()
仍然是一种方便的方法,用于查找在旋转后我们希望排在第一位的元素的索引rotate()
接受负的旋转量,因此我们只需对索引求反(反转符号)并将其传递给该方法。计算出的索引可能超出列表的末尾,但是rotate()
也可以处理,所以这没关系。由于输入列表中可能缺少输入日,需要使用集合对工作日的完整列表进行排序。rotate
然后由输入列表进行过滤:
公共静态列表顺序WithDayFirst(DayOfWeek-first,列表dows){
List fullWeek=Arrays.asList(DayOfWeek.values());
Collections.rotate(整周,-first.ordinal());
返回fullWeek.stream().filter(dows::contains).collect(Collectors.toList());
}
测试:
//星期日可用
System.out.println(orderWithDayFirst(
星期天,星期天,
asList(DayOfWeek.周一,DayOfWeek.周六,DayOfWeek.周日,DayOfWeek.周二));
System.out.println(“=”);
//没有星期五
System.out.println(orderWithDayFirst(
星期五,星期五,
asList(DayOfWeek.周一,DayOfWeek.周六,DayOfWeek.周日,DayOfWeek.周二));
输出
[SUNDAY, MONDAY, TUESDAY, SATURDAY]
====
[SATURDAY, SUNDAY, MONDAY, TUESDAY]
由于输入列表中可能缺少输入日,因此需要使用
集合对工作日的完整列表进行排序。旋转,然后按输入列表进行过滤:
公共静态列表顺序WithDayFirst(DayOfWeek-first,列表dows){
List fullWeek=Arrays.asList(DayOfWeek.values());
Collections.rotate(整周,-first.ordinal());
返回fullWeek.stream().filter(dows::contains).collect(Collectors.toList());
}
测试:
//星期日可用
System.out.println(orderWithDayFirst(
星期天,星期天,
asList(DayOfWeek.周一,DayOfWeek.周六,DayOfWeek.周日,DayOfWeek.周二));
System.out.println(“=”);
//没有星期五
System.out.println(orderWithDayFirst(
星期五,星期五,
asList(DayOfWeek.周一,DayOfWeek.周六,DayOfWeek.周日,DayOfWeek.周二));
输出
[SUNDAY, MONDAY, TUESDAY, SATURDAY]
====
[SATURDAY, SUNDAY, MONDAY, TUESDAY]
名单是否保证从一开始就从周一到周日排序?输入的星期日是否保证在列表中?列表保证从周一到周日排序。输入日期不保证在列表中,在这种情况下,排序从列表中的下一个值开始。列表是否为guaran