java - 如何使用流来编写它? Java 8

标签 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;
    }

此处 - 从方法返回一些 boolean 值。如果指定日期已存在于某个任务中,则返回 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;
        }
    }

提前致谢:)

最佳答案

方法 findFirst() 返回一个 Optional。所以你可以检查 optional 是否为空。

return !userTasklist.stream()
.filter(n -> n.getDate().equals(taskDate))
.findFirst().isPresent();

或者更简单的方法。

return !userTasklist.stream().anyMatch(n -> n.getDate().equals(taskDate));

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

关于java - 如何使用流来编写它? Java 8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29188981/

相关文章:

javascript - 需要在 javascript 中显示来自数据库的数据

javascript - 如何根据 Angular 中的复选框选择来过滤结果

javascript - 过滤器列表 - 根据计数键删除两个重复项中较小的一个

java - Java中如何在其他静态方法中使用静态方法变量?

java - 安卓 java.lang.IllegalMonitorStateException : object not locked by thread before wait()

java - 如何在java中将1200格式化为1.2k

每个循环工作的 Java

java - 在 Rhino JavaScript 引擎中公开 Java 枚举

c# - 更新 Entity Framework 6 中 foreach 循环中的记录

arrays - 对数组应用过滤器后的 xor