Java Lambda 使用条件检查解析集合

标签 java lambda java-8 conditional-statements predicate

我正在使用 Java 8 Lambdas,并在简单的用例上取得了成功。我来自 Java 和 C# .NET 的混合背景,所以我熟悉代码中的 lambda。

在我当前的用例中,我试图从一个名为值的集合中返回一个列表。我已经成功地做到了这一点

values.stream().map(x -> x).collect(Collectors.toList());

比较简单明了。我想做同样的事情,但只从集合中添加项目,其中项目上的 boolean 标志设置为 true。我以为那会像这样工作

values.stream().map(x -> { if(x.isActive())return ((Model)x);}).collect(Collectors.toList())

但是编译器一直显示这个错误:Type mismatch: cannot convert from List<Object> to List<Model>我相信编译器应该足够聪明,可以知道 map 函数的输出类型,并且在我最初的简化示例中确实如此。这就是为什么我认为这不是最好的方法。

对于 .NET 堆栈中的任何人,C#/LINQ 中的等价物将是

values.Where(x => x.isActive()).ToList();

我知道在没有 lambda 的情况下还有很多其他好的方法可以做到这一点,但我想知道如何使用 Java Lambda 在 Java 中实现这一点?

最佳答案

我认为 filter 是您要查找的内容,而不是 map

 values.stream().filter(x->x.isActive()).collect(Collectors.toList());      

关于Java Lambda 使用条件检查解析集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26658022/

相关文章:

java - oracle中d​​blinks的替代方式

java - 当我创建 Spring Boot 项目 pom.xml 时,我首先遇到错误

c# - 转换或简化具有已知值的表达式

java - 如何通过更新重复值来合并两个集合

java - 在eclipse中启动Jboss时如何运行批处理作业?

java - 单击通知时将对象传递给通知生成器中的另一个 Activity

c++ - lambda 的参数和返回值的类型转换规则是什么?

Java lambda - 返回语句中对象的类型转换?

java - 如何在静态导入上使用方法引用?

java - 如果存在Optional<>值则抛出异常