Java 爪哇Lambda';s使用条件检查向下解析集合

Java 爪哇Lambda';s使用条件检查向下解析集合,java,lambda,java-8,conditional-statements,predicate,Java,Lambda,Java 8,Conditional Statements,Predicate,我正在使用Java8Lambdas,并在简单用例方面取得了成功。我来自Java和C#.NET的混合背景,因此我熟悉lambda的代码 在我当前的用例中,我试图从名为values的集合返回一个列表。我已经像这样成功地做到了 values.stream().map(x -> x).collect(Collectors.toList()); values.stream().map(x -> { if(x.isActive())return ((Model)x);}).collect(Co

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

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

values.stream().map(x -> x).collect(Collectors.toList());
values.stream().map(x -> { if(x.isActive())return ((Model)x);}).collect(Collectors.toList())
相对简单明了。我想做同样的事情,但只添加集合中的项,其中项上的布尔标志设置为true。我以为会这样

values.stream().map(x -> x).collect(Collectors.toList());
values.stream().map(x -> { if(x.isActive())return ((Model)x);}).collect(Collectors.toList())
但是编译器一直显示这个错误:
类型不匹配:无法从一个列表转换到另一个列表
我相信编译器应该足够聪明,能够从map函数中知道输出类型,在我最初的简化示例中确实如此。这就是为什么我认为这不是最好的方法

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

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

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

我认为
过滤器
是您需要的,而不是
映射

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