首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.removeIf() vs .filter().collect()

.removeIf() vs .filter().collect()
EN

Stack Overflow用户
提问于 2019-09-11 09:14:21
回答 3查看 4.1K关注 0票数 2

我需要一个方法,它通过检查元素的字段是否包含在另一个集合的元素字段中来筛选出一个集合。哪种方式更好:

一个方法,返回已过滤的集合:

代码语言:javascript
复制
List method1(List foo, List bar){
    if(bar.isEmpty()) 
        return Collections.emptyList();
    Set<Integer> ids = bar.stream().map(elem->elem.getId).collect(Collectors.toSet());
    return foo.stream().filter(elem->ids.contains(elem.barId));
}
  • 容易处理的空条件集合
  • 创建流和另一个集合

或者修改原始集合的方法:

代码语言:javascript
复制
void method2(List foo, List bar){
    if(bar.isEmpty()){ 
         foo.clear();
         return;
    }
    Set<Integer> ids = bar.stream().map(elem->elem.getId).collect(Collectors.toSet());
    foo.removeIf(elem->ids.contains(elem.barId));
}
  • 无冗余对象
  • 清除原始集合,而不是只返回新的
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-09-12 13:00:01

第一种方法更好。现实生活中的外参数概念很难维护。

票数 2
EN

Stack Overflow用户

发布于 2019-09-12 13:19:03

您的method1 & method2不会像您预期的那样工作,因为它在foo上的最后一个流中没有终端操作。建议尽可能使用不可变的方法,因为这样可以减少错误发生的代码,并且易于理解代码行为。你应该看看这件事

代码语言:javascript
复制
List method1(List foo, List bar){
    
    if (bar.isEmpty()) 
        return Collections.emptyList();

    final Set<Integer> barIds = getIds(bar);
    return foo.stream()
              .filter(elem->barIds.contains(elem.barId))
              .collect(Collectors.toList());
}

private Set<Integer> getIds(final List bar) {

  return bar.stream()
            .map(elem->elem.getId)
            .collect(Collectors.toSet());
}
票数 2
EN

Stack Overflow用户

发布于 2019-09-11 10:05:23

返回不同版本的输入的方法不是修改它,而是通过值传递输入的方法,这是一种符合Java设计方式的策略。另一种是通过引用传递输入的方法,即C的工作方式。正如您刚才所证明的,在Java中也可以这样做,但它更多地是一种“解决办法”,而不是一种特性。https://www.mathwarehouse.com/programming/passing-by-value-vs-by-reference-visual-explanation.php#targetText=The%20terms%20%22pass%20by%20value,where%20the%20value%20is%20stored.

不是说哪个版本更好,但如果有疑问,我会使用第一个版本。

希望我帮了你。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57885833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档