我正在做我的学校项目,我的想法之一是通过询问来创建待办事项清单
步骤1.输入事件步骤2.用户输入步骤3.输入到期日期(十进制格式)步骤4.用户输入步骤5。询问用户是否要输入更多事件(1表示是,0表示否)步骤6。当用户未输入0时,重复过程1-5,然后我希望我的代码根据到期日对事件进行排序。我在StackOverflow上找到了适用于我的程序的内容,但存在以下问题:
Collections.sort(sortedList, Comparator.comparing(s -> arr_dues[stringListCopy.indexOf(s)]));
,如果我提交此代码,我应该能够理解。如果可以的话,请您向我解释一下比较器,或者删除一个视频链接,我可以观看该视频以了解这个概念。非常非常非常感谢。这是我的代码。
static void to_do() {
int more = -1;
String event;
double due = 0.0;
Scanner in = new Scanner(System.in);
ArrayList<String> events = new ArrayList <String>();
ArrayList<Double> dues = new ArrayList <Double>();
System.out.println("To-Do List Generator:");
while (more != 0) {
System.out.println("Please enter your event");
event = in.nextLine();
events.add(event);
System.out.println("Please enter the due date in decimal form");
due = in.nextDouble();
dues.add(due);
System.out.println("Do you have more events to add? Yes enter 1, No enter 0");
more = in.nextInt();
}
System.out.println("Entry Successful. Here is your to do list");
String[] arr_events = new String[events.size()];
double[] arr_dues = new double[dues.size()];
for (int i=0; i<events.size();i++){
arr_events[i] = events.get(i);
}
for (int i=0; i<dues.size();i++){
arr_dues[i] = dues.get(i);
}
final List<String> stringListCopy = Arrays.asList(arr_events);
ArrayList<String> sortedList = new ArrayList(stringListCopy);
Collections.sort(sortedList, Comparator.comparing(s -> arr_dues[stringListCopy.indexOf(s)]));
String[] returnarr = new String[stringListCopy.size()];
Collections.sort(dues);
for (int i = 0; i<stringListCopy.size(); i++) {
returnarr[i] = sortedList.get(i);
}
for (int i = 0; i<arr_dues.length; i++) {
System.out.print(returnarr[i] + ", Due: ");
System.out.println(dues.get(i));
}
}
public static void main(String[] args) {
to_do();
}
标准用法为:
List<String> sortedList = new ArrayList<>(stringListCopy)
这里的问题可能是在处理换行符。当您调用in.nextInt()
它时,它从中读取一个整数,System.in
但不读取最终的换行符,然后由读取in.nextLine()
。尝试打印您正在读取的值以查看其作用。
阅读有关排序和lambda的标准教程。总而言之,Collections.sort
需要一个Comparator
。该Comparator
接口具有许多用于创建比较器的静态方法。Comparator.comparing
创建一个比较器,该比较器比较生成的值Function
。Function
是一个功能性接口,因此可能需要一个lambda。您显示的语句可以解释为:sortedList
使用表达式根据从每个条目生成的值的自然顺序对集合进行排序arr_dues[stringListCopy.indexOf(s)]
。
还要注意,更好的设计是将每个事件封装在一个对象中:
class Event {
private final String name;
private final LocalDate dueDate;
}
并有一个事件列表:
List<Event> toDoList = new ArrayList<>();
确实不需要在集合和数组之间进行复制。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句