如何使用流来编写它? Java 8
How to write it using streams? Java 8
我写了一段代码,想知道如何使用流将它写得更优雅
这里是:
public boolean possibleToAddTask(LocalDate taskDate, final String username) {
List<Task> userTasklist = find(username).getTaskList();
for(Task task : userTasklist) {
if(task.getDate().equals(taskDate)){
return false;
}
}
return true;
}
这里 - 一些布尔值是 return 从方法中编辑的。如果指定的日期已经存在于某个任务中,它 returns false,否则 true(所以 return 类型回答方法名称中提出的问题:))
我尝试在流上使用过滤器,但它只工作了一段时间,然后单元测试给了我一些意想不到的结果,所以我删除了它并像上面那样写了它。现在想美化一下
以前是这样的:
public boolean possibleToAddTask(LocalDate taskDate, final String username) {
List<Task> userTasklist = find(username).getTaskList();
try {
userTasklist.stream().filter(n -> n.getDate().equals(taskDate)).findFirst().get();
return true;
} catch (NoSuchElementException e) {
return false;
}
}
提前致谢:)
方法 findFirst() return 可选。所以你可以检查 optional 是否为空。
return !userTasklist.stream()
.filter(n -> n.getDate().equals(taskDate))
.findFirst().isPresent();
或者更简单的方法。
return !userTasklist.stream().anyMatch(n -> n.getDate().equals(taskDate));
编辑:现在单元测试应该通过了。
如何做一些事情,比如将 List 转换为 Set,然后调用 contains():
return userTasklist.stream().map(Task::getDate).collect(Collectors.toSet()).contains(taskDate);
我写了一段代码,想知道如何使用流将它写得更优雅 这里是:
public boolean possibleToAddTask(LocalDate taskDate, final String username) {
List<Task> userTasklist = find(username).getTaskList();
for(Task task : userTasklist) {
if(task.getDate().equals(taskDate)){
return false;
}
}
return true;
}
这里 - 一些布尔值是 return 从方法中编辑的。如果指定的日期已经存在于某个任务中,它 returns false,否则 true(所以 return 类型回答方法名称中提出的问题:))
我尝试在流上使用过滤器,但它只工作了一段时间,然后单元测试给了我一些意想不到的结果,所以我删除了它并像上面那样写了它。现在想美化一下
以前是这样的:
public boolean possibleToAddTask(LocalDate taskDate, final String username) {
List<Task> userTasklist = find(username).getTaskList();
try {
userTasklist.stream().filter(n -> n.getDate().equals(taskDate)).findFirst().get();
return true;
} catch (NoSuchElementException e) {
return false;
}
}
提前致谢:)
方法 findFirst() return 可选。所以你可以检查 optional 是否为空。
return !userTasklist.stream()
.filter(n -> n.getDate().equals(taskDate))
.findFirst().isPresent();
或者更简单的方法。
return !userTasklist.stream().anyMatch(n -> n.getDate().equals(taskDate));
编辑:现在单元测试应该通过了。
如何做一些事情,比如将 List 转换为 Set,然后调用 contains():
return userTasklist.stream().map(Task::getDate).collect(Collectors.toSet()).contains(taskDate);