如何用流写它?Java 8

aza*_*lut 5 java foreach filter java-8 java-stream

我写了一段代码并想知道如何将它写得更优雅,在这里使用流是:

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;
    }
Run Code Online (Sandbox Code Playgroud)

这里 - 从方法返回一些布尔值.如果某个任务中已存在指定的日期,则返回false,否则为true(因此返回类型将回答方法名称中引发的问题:))

我正在尝试使用流上的过滤器,但它只运行了一段时间,然后单元测试给了我一些意想不到的结果,所以我删除它并将其写成它的上层.现在我想美化它

以前是这样的:

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;
        }
    }
Run Code Online (Sandbox Code Playgroud)

提前致谢 :)

Ale*_*rek 10

方法findFirst()返回一个Optional.因此,您只需检查可选项是否为空.

return !userTasklist.stream()
.filter(n -> n.getDate().equals(taskDate))
.findFirst().isPresent();
Run Code Online (Sandbox Code Playgroud)

甚至更容易的方法.

return !userTasklist.stream().anyMatch(n -> n.getDate().equals(taskDate));
Run Code Online (Sandbox Code Playgroud)

编辑:现在单元测试应该通过.