如何在Java 8中使用filter()方法
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()方法相关推荐
- contains方法 java_contains方法如何在Java项目中使用
contains方法如何在Java项目中使用 发布时间:2020-11-30 15:24:20 来源:亿速云 阅读:88 作者:Leah contains方法如何在Java项目中使用?相信很多没有经验 ...
- jfinal 普通java工程_JFinal getModel方法如何在java项目中使用
JFinal getModel方法如何在java项目中使用 发布时间:2020-11-17 15:11:27 来源:亿速云 阅读:94 作者:Leah 今天就跟大家聊聊有关JFinal getMode ...
- java 线程中创建线程_如何在Java 8中创建线程安全的ConcurrentHashSet?
java 线程中创建线程 在JDK 8之前,还没有办法在Java中创建大型的线程安全的ConcurrentHashSet. java.util.concurrent包甚至没有一个名为Concurren ...
- 如何在Java 8中创建线程安全的ConcurrentHashSet?
在JDK 8之前,还没有办法在Java中创建大型的线程安全的ConcurrentHashSet. java.util.concurrent包甚至没有一个名为ConcurrentHashSet的类,但是 ...
- 如何在Java 8中使用LocalDateTime格式化/解析日期-示例教程
Java项目中的常见任务之一是将日期格式化或解析为String,反之亦然. 解析日期表示您有一个表示日期的字符串,例如" 2017-08-3",并且要将其转换为表示Java中日期的 ...
- 如何在Java项目中查找未使用/无效的代码
本文翻译自:How to find unused/dead code in java projects What tools do you use to find unused/dead code i ...
- mye连接mysql数据库_MySQL_如何在Java程序中访问mysql数据库中的数据并进行简单的操作,在上篇文章给大家介绍了Myeclip - phpStudy...
如何在Java程序中访问mysql数据库中的数据并进行简单的操作 在上篇文章给大家介绍了Myeclipse连接mysql数据库的方法,通过本文给大家介绍如何在Java程序中访问mysql数据库中的数据 ...
- java多线程中的join方法详解
java多线程中的join方法详解 方法Join是干啥用的? 简单回答,同步,如何同步? 怎么实现的? 下面将逐个回答. 自从接触Java多线程,一直对Join理解不了.JDK是这样说的:join p ...
- Shell-通过shell启动Java类中的main方法 + 通过Shell启动jar包
文章目录 概述 shell启动Java类中的main方法 启动脚本分析 启动脚本 shell启动jar包 概述 Java程序 运行在linux主机上, 通过shell脚本启动为进程. Java程序中 ...
最新文章
- javascript优化_如何通过使用服务人员来优化JavaScript应用
- 23. Leetcode 86. 分隔链表 (链表-基础操作类-分隔链表)
- linux中更改文件所有者
- PyQt5学习笔记06----Qt Designer自定义信号emit及传参
- PHP substr_replace() 函数
- Combobox MVVM绑定并设置选中
- $(...).modal is not a function
- python中tqdm的用法
- 用JavaScript+HTML实现双色球随机摇号效果
- 户籍化管理系统 c语言,社会单位消防安全“户籍化管理系统录入要点
- 回波损耗和电压驻波比
- 加拿大计算机科学专业高中选课,加拿大高中选课攻略
- python excel 微信_Python读写Excel文件第三方库汇总,你想要的都在这儿!,微信文件第三方打开...
- 90°光混频器原理分析
- SQL-根据生日计算年龄
- html文件如何设置右键菜单,windows系统使用小技巧,创建属于自己的右键新建菜单-右键菜单设置...
- 微信小程序:上传的图片显示旋转问题
- 14个种类,600款笔刷!如何做一套属于自己的精美笔刷?
- python中小学生编程学习-小学生python编程在线教育-小码精灵编程线上教育机构...
- 旧金山犯罪预测与可视化分析
热门文章
- codeforces gym-101741 Subsequence Sum Queries 分治+离线
- Sentinel(七)之网关限流
- Spark入门(十三)之分组求平均值
- 【ajax】readyState=4并且status=200时,还进error方法
- JavaScript学习总结(九)——Javascript面向(基于)对象编程
- 菜鸟学Java(六)——简单验证码生成(Java版)
- Ajax基本案例详解之$.getjson的实现
- 块元素与行内元素转化(display属性)
- 基本数据类型、包装类、String三者之间的相互转换
- 2015蓝桥杯省赛---java---C---6(奇妙的数字)