lambda - 如何在 lambda 过滤器中使用多个声明?

标签 lambda java-8

我对 Lambda 还很陌生,我正在尝试按以下方式使用它,但它似乎不起作用。是否可以有多个声明,其中其中一个是条件?

ArrayList<Message> msgs = new ArrayList<>(ms.values());
Calendar cal = Calendar.getInstance();

msgs.stream().filter( m -> {
    cal.setTime(m.getCreated());
    cal.get(Calendar.YEAR) == year
});

据我了解,它的工作原理如下:

collection.stream().filter(x -> 1 == x);

但是由于我需要设置Date 并将其与Calendar 一起使用来获取年份,因此我必须在两个声明中执行此操作。

我知道这有效:

msgs.forEach(m -> {
    cal.setTime(m.getCreated());
    if (cal.get(Calendar.YEAR) != year) {
        msgs.remove(m);
    }
});

但我想知道是否可以按照我尝试的方式或相对类似的方式进行操作?

最佳答案

如果使用花括号,则需要返回一个值。它期待一个 bool 返回值。它只是假设没有大括号。

return cal.get(Calendar.YEAR) == 年;

关于lambda - 如何在 lambda 过滤器中使用多个声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40824581/

相关文章:

python - 将 lambda 函数保存到文件而不引用其他变量/显式

asp.net-mvc - 使用 Linq to Sql 选择多个表

java-7 - Java-7 中的签名多态方法

java - Tomcat 7 上的 Websockets 不起作用

java - 在 Java 中存储不同类型对象的有序列表的最佳方法?

Java 8 AcceptEither CompletableFuture 示例

java - 为什么 Kotlin 不能推断以下 lambda 参数(在 Java -> Kotlin 转换之后)?

Scala - 在映射函数中与 lambda 混淆

lambda - 在 Jess 中传递带参数的 lambda

java - 这个 Lambda 表达式的解释