Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 订购ArrayList<;星期一>;基于特定值_Java_Arraylist_Rotation_Java Time_Dayofweek - Fatal编程技术网

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