【问题标题】:Filter based on condition and collect the object根据条件过滤并收集对象
【发布时间】:2018-05-27 00:02:48
【问题描述】:

在 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&lt;EMP&gt;

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

【问题讨论】:

    标签: java lambda filter java-8 java-stream


    【解决方案1】:

    如果您想最终收集Emp 对象,则不应使用flatMap,因为它会将每个元素都更改为其他元素,并且很难将它们映射回来。

    你应该把你所有的逻辑放在一个filter中:“如果getLanguage包含"java",则保留Emp对象”。

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

    【讨论】:

      【解决方案2】:

      您可以使用接受过滤器predicateremoveIf 方法处理当前 列表:

      empList.removeIf(e -> !e.getLanguage().equals("java"));
      

      或者您可以将 当前 列表复制到 另一个 列表并执行相同操作。

      【讨论】:

        【解决方案3】:

        你也可以这样做:

        List<Object> optionMetas = new ArrayList<>();
        Map<Long, Object> optionIdMetaMap_ = optionMetas.stream()
                .filter(option -> option.getXX() || option.getXXX().equal("java"))
                .collect(Collectors.toMap(Object::getKEY, item -> item));
        

        filter()中添加您的相关条件。

        【讨论】:

          猜你喜欢
          • 2019-07-27
          • 2019-12-13
          • 2018-01-10
          • 2021-12-05
          • 1970-01-01
          • 1970-01-01
          • 2019-09-15
          • 2020-05-25
          • 2021-10-04
          相关资源
          最近更新 更多