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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 倾向得分匹配结果(倾向得分匹配后怎么进行回归)

    原标题:手把手教你做倾向评分匹配-PSM本文首发于“百味科研芝士”微信公众号,转载请注明:百味科研芝士,Focus科研人的百味需求。各位科研芝士的朋友大家好,今天和大家分享一下新的知识点—PSM,或许大家早已听过这个名词了,或许你对它还是半知半解,不过没关系,希望可以通过今天的帖子帮助你对该名词有一定的理解。PSMPSM英文全称为PropensityScoreMatching,意思是倾向匹配…

    2022年4月12日
    96
  • Python如何生成可执行的.exe文件

    Python如何生成可执行的.exe文件为什么要生成可执行文件:不需要安装对应的编程环境可以将你的应用闭源用户可以方便、快捷的直接使用打包工具pyinstaller一.pyinstaller简介Python是一个脚本语言,被解释器解释执行。它的发布方式:.py文件:对于开源项目或者源码没那么重要的,直接提供源码,需要使用者自行安装Python并且安装依赖的各种库。(Python官方的各种安装包就是这样做的).pyc文件…

    2022年5月25日
    23
  • Android 使用ViewPager实现左右循环滑动图片

    Android 使用ViewPager实现左右循环滑动图片ViewPager这个小demo实现的是可以左右循环滑动图片,下面带索引,滑到最后一页在往右滑动就要第一页,第一页往左滑动就到最后一页,先上效果图,用美女图片是我一贯的作风,呵呵1.  首先看一些layout下的xml

    2022年7月22日
    9
  • PHP实现对短信验证码发送次数的限制

    PHP实现对短信验证码发送次数的限制

    2021年11月3日
    64
  • pycharm主菜单不见_pycharm点击run不运行

    pycharm主菜单不见_pycharm点击run不运行macos下:pycharm-communityeditionpycharm->preferences->Appearance&Behavior->MenusandToolbars->Mainmenu->右侧addafter->自己添加和设置需要的菜单项…

    2022年8月27日
    3
  • idea 2022.01 破解 激活码[最新免费获取]

    (idea 2022.01 破解 激活码)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html4K…

    2022年4月1日
    217

发表回复

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

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