java - 根据条件过滤并收集对象

标签 java lambda filter java-8 java-stream

在 java 8 中,根据一些过滤条件收集 emp 对象。

在主类中:

List<Emp> empList = Arrays.asList(
    new Emp("aaa", language1), 
    new Emp("cc", language2),
    new Emp("bb", language3), 
    new Emp("dd", language3)
);

empList.stream()
    .flatMap(s->s.getLanguage().stream())
    .filter(s->s.equals("java"))
    .forEach(System.out::println); //Here just i am printing. 

其实我需要收集new List<EMP> .

如何收集所有语言为“java”的 emp 对象。我该怎么做?

最佳答案

你不应该使用 flatMap如果你想 Collection Emp对象,因为它会将每个元素更改为其他元素,并且很难将它们映射回来。

您应该将所有逻辑放在 filter 中: "如果 Emp 包含 getLanguage,则保留 "java" 对象。

empList.stream()
    .filter(x->x.getLanguage().contains("java"))
    .collect(Collectors.toList());

关于java - 根据条件过滤并收集对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47787247/

相关文章:

c# - 根据接口(interface)生成表达式

c# - LINQ 如何在 lambda 表达式中选择超过 1 个属性?

R dplyr列作为变量

javascript - 有选择地工作的 Servlet 过滤器

java - 对于Java流,generate + limit是否保证不会额外调用生成器函数,或者是否有更好的替代方案?

java - 创建maven项目

lambda - 在Java 8中,当我使用stream()和filter()时,我可以保留与主对象相关的对象(而不是对象本身)吗?

javascript - Lodash中的多个过滤条件

java - 如何计算Java中对象的数值年龄

java - 一个 liner 重命名一组文件和目录