Java集合Stream类filter的使用

Java集合Stream类filter的使用之前的Java集合中removeIf的使用一文写了使用removeIf来实现按条件对集合进行过滤。这篇文章使用同样是JDK1.8新加入的Stream中filter方法来实现同样的效果。

大家好,又见面了,我是你们的朋友全栈君。

之前的Java集合中removeIf的使用一文写了使用removeIf来实现按条件对集合进行过滤。这篇文章使用同样是JDK1.8新加入的Streamfilter方法来实现同样的效果。并且在实际项目中通常使用filter更多。关于Stream的详细介绍参见Java 8系列之Stream的基本语法详解
同样的场景:你是公司某个岗位的HR,收到了大量的简历,为了节约时间,现需按照一点规则过滤一下这些简历。比如要经常熬夜加班,所以只招收男性

//求职者的实体类
public class Person { 
   
    private String name;//姓名
    private Integer age;//年龄
    private String gender;//性别

    ...
    //省略构造方法和getter、setter方法
    ...

    //重写toString,方便观看结果
    @Override
    public String toString() { 
   
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", gender='" + gender + '\'' +
                '}';
    }
}

这里就不展示使用传统Iterator来进行过滤了,有需要做对比的可以参见之前的Java集合中removeIf的使用
使用Streamfilter进行过滤,只保留男性的操作:

Collection<Person> collection = new ArrayList();
collection.add(new Person("张三", 22, "男"));
collection.add(new Person("李四", 19, "女"));
collection.add(new Person("王五", 34, "男"));
collection.add(new Person("赵六", 30, "男"));
collection.add(new Person("田七", 25, "女"));

Stream<Person> personStream = collection.stream().filter(new Predicate<Person>() { 
   
    @Override
    public boolean test(Person person) { 
   
         return "男".equals(person.getGender());//只保留男性
    }
});

collection = personStream.collect(Collectors.toList());//将Stream转化为List
System.out.println(collection.toString());//查看结果

运行结果如下:

[Person{name=‘张三’, age=22, gender=‘男’}, Person{name=‘王五’, age=34, gender=‘男’}, Person{name=‘赵六’, age=30, gender=‘男’}]
Process finished with exit code 0

上面的demo没有使用lambda表达式,下面的demo使用lambda来进一步精简代码:

Collection<Person> collection = new ArrayList();
collection.add(new Person("张三", 22, "男"));
collection.add(new Person("李四", 19, "女"));
collection.add(new Person("王五", 34, "男"));
collection.add(new Person("赵六", 30, "男"));
collection.add(new Person("田七", 25, "女"));

Stream<Person> personStream = collection.stream().filter(
        person -> "男".equals(person.getGender())//只保留男性
);

collection = personStream.collect(Collectors.toList());//将Stream转化为List
System.out.println(collection.toString());//查看结果

效果和不用lambda是一样的。

不过读者在使用filter时不要和removeIf弄混淆了:

  • removeIf中的test方法返回true代表当前元素会被过滤掉
  • filter中的test方法返回true代表当前元素会保留下来
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/131333.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Python学习系列:PyCharm CE 安装与测试

    Python学习系列:PyCharm CE 安装与测试开坑啦开坑啦~最近比赛要用Python了,开始强行学习。Mac下PyCharmCE安装先去百度PyCharm,一个很好用IDE,下载免费版的就够用啦:https://www.jetbrains.com/pycharm/然后下载安装,这里就一步步走就好。重点是你的Python,Mac自带的是Python2PyCharm在新建项目的时候会自动识别。测试我们新建一个项目:设置…

    2022年8月29日
    6
  • 职场人为什么需要理财[通俗易懂]

    职场人为什么需要理财[通俗易懂]早理财比晚理财好,保持财产增值的同时,运气好赶上一波风口,比如股市牛市,黄金牛市等,就能比那些不理财的人更快完成原始资本积累。理好财能给我们带来更好的安全感和成就感,职场人士也多了一份睡后收入,何乐而

    2022年8月3日
    6
  • idea intellij 查看接口被哪些类实现「建议收藏」

    idea intellij 查看接口被哪些类实现「建议收藏」点击接口左侧的绿色圆点出现的列表就是该接口被实现的类

    2022年8月15日
    6
  • python re.compile() 详解——Python正则表达式「建议收藏」

    python re.compile() 详解——Python正则表达式「建议收藏」1概述当我们在Python中使用正则表达式时,re模块内部会干两件事情:编译正则表达式,如果正则表达式的字符串本身不合法,会报错;用编译后的正则表达式去匹配字符串。那么如果一个正则表达式要重复使用几千次,出于效率的考虑,我们是不是应该先把这个正则先预编译好,接下来重复使用时就不再需要编译这个步骤了,直接匹配,提高我们的效率2compile()预编译十分的简单,re.co…

    2022年9月1日
    2
  • 面试被问selenium自动化模型,你了解多少?

    面试被问selenium自动化模型,你了解多少?

    2021年5月24日
    144
  • 什么是友元类[通俗易懂]

    什么是友元类[通俗易懂]======================什么是友元类=======================     当一个类B成为了另外一个类A的“朋友”时,那么类A的私有和保护的数据成员就可以被类B访问。我们就把类B叫做类A的友元。=======================友元类能做什么=======================     友元类可以通过自己的方法来

    2025年5月26日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号