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

时间:2014-10-30 16:13:37

标签: java lambda java-8 conditional-statements predicate

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

在我目前的用例中,我尝试从名为values的Collection中返回List。我已经成功完成了这个

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

相对简单明了。我想做同样的事情,但只从集合中添加项目,其中项目上的布尔标志设置为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();

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

1 个答案:

答案 0 :(得分:7)

我认为filter是你要找的而不是map

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