stream获取filter

Java集合Stream类filter的使用_黄嘉成的博客-CSDN博客

Java集合Stream类filter的使用

黄嘉成 2018-05-11 11:49:42  242767  收藏 116
分类专栏: Java高级编程 文章标签: java 集合 Stream filter 过滤
版权

Java高级编程
专栏收录该内容
4 篇文章0 订阅
订阅专栏
之前的Java集合中removeIf的使用一文写了使用removeIf来实现按条件对集合进行过滤。这篇文章使用同样是JDK1.8新加入的Stream中filter方法来实现同样的效果。并且在实际项目中通常使用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 + '\'' +
                '}';
    }
}
1
 
20
这里就不展示使用传统Iterator来进行过滤了,有需要做对比的可以参见之前的Java集合中removeIf的使用。
使用Stream的filter进行过滤,只保留男性的操作:

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());//查看结果
1
 
16
运行结果如下:

[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());//查看结果
1
 
效果和不用lambda是一样的。

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

removeIf中的test方法返回true代表当前元素会被过滤掉;
filter中的test方法返回true代表当前元素会保留下来。

黄嘉成
关注

————————————————
版权声明:本文为CSDN博主「黄嘉成」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_33829547/article/details/80279488

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/326979.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL数据库开发的 36 条军规

转载自 MySQL数据库开发的 36 条军规 核心军规 尽量不在数据库做运算 控制单表数据量 纯INT不超过10M条&#xff0c;含Char不超过5M条 保持表身段苗条 平衡范式和冗余 拒绝大SQL&#xff0c;复杂事务&#xff0c;大批量任务 字段类军规 用好数值字段&#xff0c;尽量简化…

mybatis简单案例源码详细【注释全面】——测试层(UserMapperTest.java)

/** * Title: UserMapperTest.java * Package org.test * Description: TODO该方法的主要作用&#xff1a; * author A18ccms A18ccms_gmail_com * date 2017-10-5 下午7:51:50 * version V1.0 */ package org.test;import java.io.IOException; import java.io.InputStr…

Visual Studio 2017 RC3支持.NET Core,延迟对Python的支持

Visual Studio 2017第三个候选版本上周发布&#xff0c;解决了之前发现的安装程序的小问题。由于这些问题得到了解决&#xff0c;现在值得关注的就是这次版本中更新了什么内容。&#xff08;版本是发布于1月27日的build 26127.00&#xff09; RC3版本中最值得关注的部分就是对N…

双向链表的(CRUD)

代码实现(CRUD) package com.atguigu.linkedlist;/*** 创建人 wdl* 创建时间 2021/3/19* 描述*/ public class DoubleLinkedListDemo {public static void main(String[] args) {//测试System.out.println("双向链表的测试");HeroNode2 hearo1 new HeroNode2(1, &q…

java读取Resources下文件

java读取Resources下文件_杰子的世界-CSDN博客_java获取resources下的文件 第四种&#xff0c; 读取路径 ResourceBundle bundle ResourceBundle.getBundle("config"); String url bundle.getString("url"); 1 2 该方法默认读取的是resources文件夹下的以…

达到年薪 40W 必需掌握的技术。

转载自 达到年薪 40W 必需掌握的技术。 很多人在问我&#xff0c;程序员如何拿高薪&#xff0c;如何做到年薪40W&#xff0c;其实总结出来还是一句话&#xff0c;你的技术决定你的能力已经薪资。 那么什么样的技术人才才能拿到一份Java行业里面的高薪呢&#xff1f;下面是我…

mybatis简单案例源码详细【注释全面】——Utils层(MybatisUtils.java)

/** * Title: MybatisUtils.java * Package org.util * Description: TODO该方法的主要作用&#xff1a; * author A18ccms A18ccms_gmail_com * date 2017-10-5 下午8:38:14 * version V1.0 */ package org.util;import java.io.IOException; import java.io.InputStrea…

虚拟研讨会:.NET的未来在哪里?

.NET生态系统在过去的一年中发生了很多事情。在几个方面发展非常迅速&#xff1a;Xamari、UWP、.NET Core、.NET native、F#和开源等等。 如果要关注细节&#xff0c;那大的景象难以描绘。因为在每个方面都有新的动作&#xff1a;跨平台、云、移动、Web应用和通用应用。开发人员…

iOS Charles 抓包

iOS Charles 抓包指南 - 从入门到精通_VictorZhang-CSDN博客_charles ios 下载安装包 Download a Free Trial of Charles • Charles Web Debugging Proxy

使用Servlet上传多张图片——访问提示

上传文件&#xff0c;我们在做项目中补课避免的&#xff0c;有时候我们需要上传单张或者单个文件&#xff0c;但是有时候我们就需要上传多个文件或者多张图片了&#xff0c;我们这里以多张&#xff08;4张&#xff09;图片为例&#xff0c;再多也都是一样的概念&#xff0c;接下…

云计算设计模式(六)——命令和查询职责分离(CQRS)模式

隔离&#xff0c;通过使用不同的接口&#xff0c;从操作读取数据更新数据的操作。这种模式可以最大限度地提高性能&#xff0c;可扩展性和安全性;支持系统在通过较高的灵活性&#xff0c;时间的演变;防止更新命令&#xff0c;从造成合并在域级别上的冲突。 背景和问题 在传统的…

Intellij IDEA 那些隐藏好用的小技巧

转载自 Intellij IDEA 那些隐藏好用的小技巧 概述 之前写了一篇介绍IntellIJ IDEA的文章《 Intellij Idea非常6的10个姿势 》&#xff0c;主要是列出一些平时大家可能没用过或者没怎么用&#xff0c;但是又非常好用的IntellIJ IDEA小技巧。由于篇幅原因&#xff0c;只是列出了…

约瑟夫(环)问题(Josephu)(单向环形链表)

问题描述 代码实现 package com.atguigu.linkedlist;import com.sun.org.apache.bcel.internal.generic.NEW;/*** 创建人 wdl* 创建时间 2021/3/19* 描述*/ public class Josepfu {public static void main(String[] args) {//测试一把看看构建的环形链表和遍历是否正确Circle…

使用Servlet上传多张图片——实体层(ProductInfo.java)

package orz.treeSquirrels.entity; /*** 商品信息表的实体类* author Administrator**/ public class ProductInfo {private int productId; //商品编号private String productName; //商品名称private float price; //商品价格private String details; //商品详情…

vue+vscode+nodejs 开发环境搭建

参考文献 vuevscodenodejs 开发环境搭建 - Desperador - 博客园 nodejs 指定全局安装路径和缓存路径 - Curedfisher - 博客园 安装配置nodejs并创建Vue项目 vscode下载地址&#xff1a; Documentation for Visual Studio Code nodejs安装配置 1.下载 地址&#xff1a; …

用数组模拟栈

思路分析 代码实现 package com.atguigu.stack;import com.sun.org.apache.xml.internal.dtm.ref.sax2dtm.SAX2DTM2;import java.net.ServerSocket; import java.util.ArrayList; import java.util.Scanner; import java.util.Stack;/*** 创建人 wdl* 创建时间 2021/3/20* 描述…

Redis PK Memcached,哪个更牛叉

转载自 Redis PK Memcached&#xff0c;哪个更牛叉 说到 redis 就会联想到 memcached&#xff0c;反之亦然。了解过两者的同学有那么个大致的印象&#xff1a; redis 与 memcached 相比&#xff0c;不仅支持简单的 key-value 数据类型&#xff0c;同时还提供 list,set,zset,ha…

CoreCLR源码探索(三) GC内存分配器的内部实现

在前一篇中我讲解了new是怎么工作的, 但是却一笔跳过了内存分配相关的部分.在这一篇中我将详细讲解GC内存分配器的内部实现.在看这一篇之前请必须先看完微软BOTR文档中的"Garbage Collection Design",原文地址是: https://github.com/dotnet/coreclr/blob/master/Doc…

使用Servlet上传多张图片——Dao层(BaseDao.java)

package orz.treeSquirrels.dao;import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.List;/*** * * 项目名称&#xff1a;test_uploadFile …