文章目录

  • 前言
  • 一、简单匹配过滤
  • 二、对象匹配过滤
  • 三、自定义匹配过滤

前言

Java集合Stream 出自 Java8。
可谓是加量不加价,丰富了使用场景,还精简了代码。虽然牺牲了一点可读性,但总体来说是很好用的。以下总结其中 filter 的一些用法,整理相关的例子。


以下是几种场景

一、简单匹配过滤

简单对象

public class TestFilter {public static void main(String[] args) {List<String> list = Arrays.asList("AAB","BBB","ACC");System.out.println("过滤相等-------------------------------------------");List<String> result1 = list.stream().filter(v -> v.equals("AAB")).collect(Collectors.toList());result1.forEach(v-> System.out.println(v));System.out.println("过滤 模糊相等(包含)-------------------------------------------");List<String> result2 = list.stream().filter(v -> v.contains("B")).collect(Collectors.toList());result2.forEach(v-> System.out.println(v));System.out.println("多条件 过滤 与:&&; 或||-------------------------------------------");List<String> result3 = list.stream().filter(v -> v.contains("A") && v.contains("C")).collect(Collectors.toList());result3.forEach(v-> System.out.println(v));}
}

运行结果

可见,filter支持单条件,多条件组合匹配过滤


二、对象匹配过滤

假设对象

public class User {/** 名称 */private String name;/** 年龄 */private Integer age;
}

例子

public class TestFilter1 {public static void main(String[] args) {List<User> userList = new ArrayList<>();userList.add(new User("小明", 18));userList.add(new User("王姐", 21));System.out.println("过滤相等-------------------------------------------");List<User> result1 = userList.stream().filter(v -> v.getName().equals("小明")).collect(Collectors.toList());result1.forEach(v-> System.out.println(v));}
}

运行结果


三、自定义匹配过滤

看看filter接口的源码

public interface Stream<T> extends BaseStream<T, Stream<T>> {/*** Returns a stream consisting of the elements of this stream that match* the given predicate.** <p>This is an <a href="package-summary.html#StreamOps">intermediate* operation</a>.** @param predicate a <a href="package-summary.html#NonInterference">non-interfering</a>,*                  <a href="package-summary.html#Statelessness">stateless</a>*                  predicate to apply to each element to determine if it*                  should be included* @return the new stream*/Stream<T> filter(Predicate<? super T> predicate);

可以看到,filter接收的参数是Predicate,这是一个布尔接口,用于各种匹配,所以自定义filter实际上我们是你把Predicate的用法丰富起来
比如:

public class TestFilter1 {public static void main(String[] args) {List<User> userList = new ArrayList<>();userList.add(new User("小明", 18));userList.add(new User("王姐", 21));System.out.println("过滤相等-------------------------------------------");List<User> result2 = userList.stream().filter(new Predicate<User>() {@Overridepublic boolean test(User user) {if (user.getAge() > 18) {return true;}else{return false;}}}).collect(Collectors.toList());result2.forEach(v-> System.out.println(v));}
}

运行结果

stream().filter匹配过滤总结相关推荐

  1. stream filter 用法_JDK1.8新特性Stream和Collectors19个常用示例总结

    关于Stream和Collectors的用法,这应该是总结的最全的文章了,大家可以收藏一下. 一:简介 java.util.Stream 表示能应用在一组元素上一次执行的操作序列.Stream 操作分 ...

  2. JDK8特性--Stream(求和,过滤,排序)

    Stream简介 Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据. Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Jav ...

  3. fiddler filters 使用(fiddler只显示指定请求,fiddler不显示指定请求,即filter请求过滤)转自:http://blog.csdn.net/notejs/article/

    fiddler filters 使用(fiddler只显示指定请求,fiddler不显示指定请求,即filter请求过滤) Fiddler 有一个filters可以很好的帮助我们只显示我们关系的请求或 ...

  4. java stream filter map collector使用

    @Testpublic void demo1(){ArrayList<Integer> list = new ArrayList<>();for (int i = 0; i & ...

  5. lambda的peek(流元素操作),filter(过滤),map(映射),limit(截断),skip(跳过),collect,distinct(去重)函数使用

    原博地址 @RequestMapping(value = "/list.json", method = GET) public void list(ModelMap modelMa ...

  6. Elasticearch Filter Query 过滤查询--(五)

    Elasticearch Filter Query 过滤查询 1,过滤查询 ES查询操作分为2种:查询(query)和 过滤(filter). 1. Query,默认计算每个返回文档的得分,然后根据得 ...

  7. list.stream.filter常用方式

    在Java8中对集合的操作可以这样操作1.查找集合中的第一个对象Optional<Object> first= ObjectList.stream() .filter(a -> &q ...

  8. Java Stream(求和,过滤,排序)

    前言 利用Java8 新特性 Stream进行求和.过滤.排序. 提示:以下是本篇文章正文内容,下面案例可供参考 1.创建实体类 代码如下(示例): @Data public class Employ ...

  9. wireshare capture filter捕捉过滤的设置

    我们在使用wireshark去抓取协议log的时候,经常碰到抓到的log过大,而很难打开的想象.特别是对于测试时间久的case, log size几个G,甚至十几,几十个G的情况,对于这种情况,有两种 ...

最新文章

  1. 西安翻译学院计算机分数线,西安翻译学院录取投档线
  2. WCF Data Service安全分析和说明
  3. es6对象属性的遍历
  4. Dos中重定向与文件追加
  5. 可口的JAVA-并发控制之CountDownLatch
  6. 【BZOJ3611】【HeOI2014】—大工程(虚树+dp)
  7. springMVC_数据的处理过程
  8. 三种方式使得iOS应用能够在后台进行数据更新和下载
  9. flex布局,属性用法
  10. mac操作系统如何访问共享计算机,Mac系统访问Windows共享文件的详细步骤
  11. PHP 中 this,self,parent 的区别、用法
  12. oracle 故障 linux,從硬盤安裝Oracle Linux 6.3之軟驅故障
  13. Rust :fold
  14. IIS7安装URLReWrite的妙用
  15. 新品上市|A股场内衍生品大盘点
  16. 如何通过github实现个人网页上传
  17. 凯文·凯利:AI将改变一切设计工作
  18. 脱掉“爱加密”家的壳
  19. 吐血整理APP被苹果APPStore拒绝的各种原因
  20. ps2019安装破解

热门文章

  1. HiveSql工作中常见易错点总结
  2. 优动漫PAINT之绘画助手软件简介
  3. SUN 的Java认证体系
  4. 王道俊教育学第7版笔记和课后答案
  5. 手风琴效果(vue实现)
  6. upsert----非标准DML语句
  7. git-linux终端命令详解
  8. 最小二乘支持向量机(lssvm)回归预测(matlab)
  9. 如何发好外贸邮件,看亚马逊SES邮件服务商怎么说?
  10. 使用Amazon SNS,发邮件