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代表当前元素会保留下来
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 微元素——答题

    微元素——答题微元素——答题微元素每日任务,答题

  • java 常量 表达式,Java switch语句:需要常量表达式,但它是常量

    java 常量 表达式,Java switch语句:需要常量表达式,但它是常量So,Iamworkingonthisclassthathasafewstaticconstants:publicabstractclassFoo{…publicstaticfinalintBAR;publicstaticfinalintBAZ;publicstaticfinalintBAM;…}Then,Iwouldlike…

  • python 链接mongo数据库说明

    python 链接mongo数据库说明python 链接mongo数据库说明

  • latex缩进与对齐_latex 换行缩进

    latex缩进与对齐_latex 换行缩进LATEX模板(中国运筹学会年会论文模板)%%Paper…关键词位于摘要下方,行首不缩进。摘要使用小五号(…以上这些词后均不换行。中文关键词之间以中文分号……2基础知识4Latex讲义1.单词之间用一个或多个空格分开.多个空格和一个空格效果相同.2.换行:生成的文件会自动换行,在tex文件中用一个回车换行……3.LaTeX在使用体验方面…

  • ctf-web:文件上传漏洞和文件解析漏洞

    ctf-web:文件上传漏洞和文件解析漏洞这次的内容是关于文件上传的漏洞和文件解析的漏洞的内容,在下面我会进行一个关于这两个方面的内容的实际操作以及原理介绍.其实我一直想学的就是web渗透,但是一直都不知道web渗透都有什么后来才知道居然就是sql注入,还有这几个漏洞的利用就是web渗透…这不就是我好几年前看的东西么…当然,其实我也学的不是很精通,只是稍微会一点,就不夸夸其谈了.先说说这两个漏洞的区别.一.文件上传漏洞这个漏洞产生的原因是因为上传文件的不严谨所产生的.比如我恶意上传了一个一句话木马,但是服务器没有进行对文件的过滤,就会将.

  • 树莓派3B+ 软件源更改

    树莓派3B+ 软件源更改树莓派3B+软件源更改由于树莓派软件官方源在国外,所以连接不稳定,且速度慢,所以安装初次进入系统后,一定要修改一下软件源。国内软件源有很多,在这里,我推荐自己常使用的:中国科学技术大学Raspbianhttp://mirrors.ustc.edu.cn/raspbian/raspbian/1.替换脚本下面脚本请直接复制到终端

发表回复

您的电子邮箱地址不会被公开。

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