Java 8 Stream接口引入了filter()方法,该方法可用于根据特定条件从对象集合中过滤掉某些元素。 应将此条件指定为filter()方法接受为参数的谓词

java.util.function.Predicate接口定义了一个名为test()的抽象方法,该方法接受通用类型T的对象并返回一个布尔值。

让我们进行一些编码以更清楚地了解过滤器方法。 请看以下菜式。

public class Dish {private String name;private Boolean vegitarian;private Integer calaries;private Type type;public Dish(String name, Boolean vegitarian, Integer calaries, Type type) {super();this.name = name;this.vegitarian = vegitarian;this.calaries = calaries;this.type = type;}public Boolean getVegitarian() {return vegitarian;}public void setVegitarian(Boolean vegitarian) {this.vegitarian = vegitarian;}public Type getType() {return type;}public void setType(Type type) {this.type = type;}public enum Type { MEAT, FISH, OTHER };
}

考虑一下,我们只想从所有菜肴列表中过滤掉素食菜肴。 以下是Java 8之前的方法。

List<Dish> vegetarianDishes = new ArrayList<Dish>(); for(Dish d: menu) {if(d.getVegetarian()) { vegetarianDishes.add(d);} }

上面的方法称为外部迭代,我们通过数据集合显式管理迭代。

如何使用Java 8做到这一点? 只需如下一行即可。

List<Dish> menu = ....
List<Dish> vegitarianDishes = menu.stream().filter(d -> d.getVegitarian()).collect(Collectors.toList());

我们已经以Lambda表达式的形式将Predicate实例传递给filter()方法。

另外,我们可以使用Java 8方法引用将谓词实例传递给filter()方法,如下所示。

List<Dish> menu = ....
List<Dish> vegitarianDishes = menu.stream().filter(Dish::getVegitarian).collect(Collectors.toList());

Dish::getVegitarian是Java 8方法引用的语法。 它指的是Dish类的getVegitarian()方法。

filter()方法返回菜肴流,而collect()方法将流转换为列表。 “收集”操作称为终端操作。

现在让我们说,我们要获取前三个包含300多个卡路里的菜肴。 流支持limit(n)方法,该方法返回另一个不超过给定大小的流。 请求的大小作为参数传递给limit。

List<Dish> menu = ....
List<Dish> threeHighCalaricDish = menu.stream().filter(d -> d.getCalaries() > 300).limit(3).collect(Collectors.toList());

同样,如果我们要跳过前3个元素,则流支持skip(n)方法以返回丢弃前n个元素的流。 如果流中的元素少于n个,则返回空流。 注意limit(n)skip(n)是互补的!

现在,为您做运动! 您将如何使用流过滤前两个肉类菜肴?

List<Dish> menu = ....
List<Dish> meatDishes = menu.stream().filter(d -> d.getType() == Dish.Type.MEAT).limit(2).collect(Collectors.toList())

翻译自: https://www.javacodegeeks.com/2018/07/filter-method-java-8.html

如何在Java 8中使用filter()方法相关推荐

  1. contains方法 java_contains方法如何在Java项目中使用

    contains方法如何在Java项目中使用 发布时间:2020-11-30 15:24:20 来源:亿速云 阅读:88 作者:Leah contains方法如何在Java项目中使用?相信很多没有经验 ...

  2. jfinal 普通java工程_JFinal getModel方法如何在java项目中使用

    JFinal getModel方法如何在java项目中使用 发布时间:2020-11-17 15:11:27 来源:亿速云 阅读:94 作者:Leah 今天就跟大家聊聊有关JFinal getMode ...

  3. java 线程中创建线程_如何在Java 8中创建线程安全的ConcurrentHashSet?

    java 线程中创建线程 在JDK 8之前,还没有办法在Java中创建大型的线程安全的ConcurrentHashSet. java.util.concurrent包甚至没有一个名为Concurren ...

  4. 如何在Java 8中创建线程安全的ConcurrentHashSet?

    在JDK 8之前,还没有办法在Java中创建大型的线程安全的ConcurrentHashSet. java.util.concurrent包甚至没有一个名为ConcurrentHashSet的类,但是 ...

  5. 如何在Java 8中使用LocalDateTime格式化/解析日期-示例教程

    Java项目中的常见任务之一是将日期格式化或解析为String,反之亦然. 解析日期表示您有一个表示日期的字符串,例如" 2017-08-3",并且要将其转换为表示Java中日期的 ...

  6. 如何在Java项目中查找未使用/无效的代码

    本文翻译自:How to find unused/dead code in java projects What tools do you use to find unused/dead code i ...

  7. mye连接mysql数据库_MySQL_如何在Java程序中访问mysql数据库中的数据并进行简单的操作,在上篇文章给大家介绍了Myeclip - phpStudy...

    如何在Java程序中访问mysql数据库中的数据并进行简单的操作 在上篇文章给大家介绍了Myeclipse连接mysql数据库的方法,通过本文给大家介绍如何在Java程序中访问mysql数据库中的数据 ...

  8. java多线程中的join方法详解

    java多线程中的join方法详解 方法Join是干啥用的? 简单回答,同步,如何同步? 怎么实现的? 下面将逐个回答. 自从接触Java多线程,一直对Join理解不了.JDK是这样说的:join p ...

  9. Shell-通过shell启动Java类中的main方法 + 通过Shell启动jar包

    文章目录 概述 shell启动Java类中的main方法 启动脚本分析 启动脚本 shell启动jar包 概述 Java程序 运行在linux主机上, 通过shell脚本启动为进程. Java程序中 ...

最新文章

  1. javascript优化_如何通过使用服务人员来优化JavaScript应用
  2. 23. Leetcode 86. 分隔链表 (链表-基础操作类-分隔链表)
  3. linux中更改文件所有者
  4. PyQt5学习笔记06----Qt Designer自定义信号emit及传参
  5. PHP substr_replace() 函数
  6. Combobox MVVM绑定并设置选中
  7. $(...).modal is not a function
  8. python中tqdm的用法
  9. 用JavaScript+HTML实现双色球随机摇号效果
  10. 户籍化管理系统 c语言,社会单位消防安全“户籍化管理系统录入要点
  11. 回波损耗和电压驻波比
  12. 加拿大计算机科学专业高中选课,加拿大高中选课攻略
  13. python excel 微信_Python读写Excel文件第三方库汇总,你想要的都在这儿!,微信文件第三方打开...
  14. 90°光混频器原理分析
  15. SQL-根据生日计算年龄
  16. html文件如何设置右键菜单,windows系统使用小技巧,创建属于自己的右键新建菜单-右键菜单设置...
  17. 微信小程序:上传的图片显示旋转问题
  18. 14个种类,600款笔刷!如何做一套属于自己的精美笔刷?
  19. python中小学生编程学习-小学生python编程在线教育-小码精灵编程线上教育机构...
  20. 旧金山犯罪预测与可视化分析

热门文章

  1. codeforces gym-101741 Subsequence Sum Queries 分治+离线
  2. Sentinel(七)之网关限流
  3. Spark入门(十三)之分组求平均值
  4. 【ajax】readyState=4并且status=200时,还进error方法
  5. JavaScript学习总结(九)——Javascript面向(基于)对象编程
  6. 菜鸟学Java(六)——简单验证码生成(Java版)
  7. Ajax基本案例详解之$.getjson的实现
  8. 块元素与行内元素转化(display属性)
  9. 基本数据类型、包装类、String三者之间的相互转换
  10. 2015蓝桥杯省赛---java---C---6(奇妙的数字)