Java8函数式接口Predicate实战
关于函数式接口
函数式接口 Funcational Interface 是指接口范围内只允许有一个抽象方法(不包括default和static方法)的接口。Java中有一些预定义的函数接口,如Predicate、consumer、supplier等。Lambda函数的返回类型(在JDK1.8中引入)也是一个函数接口。
- 关于java接口抽象方法、default和static方法的使用,请看另一篇文章:
https://blog.csdn.net/IndexMan/article/details/128105852
关于Predicat接口
Predicat接口位于 java.util.function包下,它提高了代码的可管理性,有助于单独进行单元测试。尤其在我们对集合数据进行条件过滤时非常有用,它包含了
test抽象方法,和and 、or、 negative 、isEqual 4个方法。
编码实战
public class PredicateDemo {
public static List<String> STUDENTS = Arrays.asList(
"Lucy","Tomas Kyte","James Bond","Yamlis","Jack Luis"
);
public static void testPredicateAnd(){
Predicate<String> letterLengthLimit = s -> s.length() > 5;
Predicate<String> letterStartWith = s -> s.startsWith("J");
// 打印长度大于5并且以J开头的学生名字
STUDENTS.stream().filter(
letterLengthLimit.and(letterStartWith)
).forEach(System.out::println);
}
public static void testPredicateOr(){
Predicate<String> letterLengthLimit = s -> s.length() > 5;
Predicate<String> letterStartWith = s -> s.startsWith("J");
// 打印长度大于5并且或者以J开头的学生名字
STUDENTS.stream().filter(
letterLengthLimit.or(letterStartWith)
).forEach(System.out::println);
}
public static void testPredicateNegative(){
Predicate<String> letterLengthLimit = s -> s.length() > 5;
Predicate<String> letterStartWith = s -> s.startsWith("J");
// 打印长度大于5并且不是以J开头的学生名字
STUDENTS.stream().filter(
letterLengthLimit.and(letterStartWith.negate())
).forEach(System.out::println);
}
public static void testPredicateIsEqual(){
Predicate<String> letterEqualPredicate = s -> Predicate.isEqual("Lucy").test(s);
STUDENTS.stream().filter(
letterEqualPredicate
).forEach(System.out::println);
}
public static void main(String[] args) {
// 创建谓词函数
Predicate<Integer> pr = a -> (a>18);
// 利用谓词函数对参数做判断,满足谓词条件返回true否则false
System.out.println(pr.test(19));
System.out.println(">>>>测试and:");
testPredicateAnd();
System.out.println(">>>>测试or:");
testPredicateOr();
System.out.println(">>>>测试negative:");
testPredicateNegative();
System.out.println(">>>>测试isEqual:");
testPredicateIsEqual();
}
}
- 输出:
true
>>>>测试and:
James Bond
Jack Luis
>>>>测试or:
Tomas Kyte
James Bond
Yamlis
Jack Luis
>>>>测试negative:
Tomas Kyte
Yamlis
>>>>测试isEqual:
Lucy
Java8函数式接口Predicate实战的更多相关文章
- Java常用函数式接口--Predicate接口使用案例
Java常用函数式接口--Predicate接口使用案例 该方法可以使用and来优化: 调用:
- java代码之美(14)---Java8 函数式接口
Java8 函数式接口 之前写了有关JDK8的Lambda表达式:java代码之美(1)---Java8 Lambda 函数式接口可以理解就是为Lambda服务的,它们组合在一起可以让你的代码看去更加 ...
- java代码(14) --Java8函数式接口
Java8函数式接口 之前有关JDK8的Lambda表达式 Java代码(1)--Java8 Lambda 函数式接口可以理解就是为Lambda服务的,它们组合在一起可以让你的代码看去更加简洁 一.概 ...
- Java8 函数式接口 @FunctionalInterface以及常用Consumer<T>、Supplier<T>、Function<T, R>、Predicate<T>总结
首先看看什么是Lambda 表达式 Lambda是一个匿名函数,我们可以把Lambda表达式理解为一段可以传递的代码(将代码像数据一样传递):最简单的Lambda表达式可由逗号分隔的参数列表.-> ...
- Java8 函数式接口-Functional Interface
目录 函数式接口: JDK 8之前已有的函数式接口: 新定义的函数式接口: 函数式接口中可以额外定义多个Object的public方法一样抽象方法: 声明异常: 静态方法: 默认方法 泛型及继承关系 ...
- Java8函数式接口和Lambda表达式
两者关系: Lambda表达式就是函数式接口(FunctionalInterface)实现的快捷方式,它相当于函数式接口实现的实例,因为在方法中可以使用Object作为参数,所以把Lambda表达式作 ...
- java8 函数式接口——Function/Predict/Supplier/Consumer
Function 我们知道Java8的最大特性就是函数式接口.所有标注了@FunctionalInterface注解的接口都是函数式接口,具体来说,所有标注了该注解的接口都将能用在lambda表达式上 ...
- java8函数式接口(Functional Interface)
介绍 函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口. 函数式接口可以被隐式转换为 lambda 表达式(箭头函数). 函数式接口代 ...
- [二] java8 函数式接口详解 函数接口详解 lambda表达式 匿名函数 方法引用使用含义 函数式接口实例 如何定义函数式接口
函数式接口详细定义 package java.lang; import java.lang.annotation.*; /** * An informative annotation type use ...
- Java8函数式接口/Lambda表达式/接口默认方法/接口静态方法/接口冲突方法重写/lambda表达式指定泛型类型等
一:函数式接口 1.函数式接口的概念就是此接口必须有且只能有一个抽象方法,可以通过@FunctionalInterface来显示规定(类似@Override),但是没有此注解的但是只有一个抽象方法的接 ...
随机推荐
- [java] - servlet路径跳转
Index.jsp <a href="servlet/HelloServlet">servlet/HelloServlet</a><br> &l ...
- 百度网盘(百度云)SVIP超级会员共享账号每日更新(2023.12.18)
一.百度网盘SVIP超级会员共享账号 可能很多人不懂这个共享账号是什么意思,小编在这里给大家做一下解答. 我们多知道百度网盘很大的用处就是类似U盘,不同的人把文件上传到百度网盘,别人可以直接下载,避免 ...
- [转帖]Python执行Linux系统命令的4种方法
https://www.cnblogs.com/pennyy/p/4248934.html (1) os.system 仅仅在一个子终端运行系统命令,而不能获取命令执行后的返回信息 代码如下: sys ...
- [转帖]技术分享| MySQL 的 AWR Report?— MySQL 状态诊断报告
https://segmentfault.com/a/1190000039959767 作者:秦福朗 爱可生 DBA 团队成员,负责项目日常问题处理及公司平台问题排查.热爱 IT,喜欢在互联网 ...
- [转帖]PG-用户|角色管理
https://www.cnblogs.com/binliubiao/p/14415203.html 1. 角色 决定发起连接的命令的初始访问权限.在PG中,角色和用户相当于是一样的对象.区别在于 ...
- [转帖]模拟enq: TX - row lock contention争用
https://www.modb.pro/db/623036 enq: TX - row lock contention它表示一个事务正在等待另一个事务释放被锁定的行.这种等待事件通常发生在并发访问数 ...
- 【转帖】FIO磁盘性能测试工具
https://www.jianshu.com/p/70b8c7d5d217 FIO工具介绍 FIO 工具是一款用于测试硬件存储性能的辅助工具,兼具灵活性.可靠性从而从众多性能测试工具中脱颖而出.磁盘 ...
- [转帖]浅谈redis采用不同内存分配器tcmalloc和jemalloc
http://www.kaotop.com/it/173669.html 我们知道Redis并没有自己实现内存池,没有在标准的系统内存分配器上再加上自己的东西.所以系统内存分配器的性能及碎片率会对Re ...
- [转贴]更改 CMD 编码(解决 VSJupyter 乱码)
https://zhuanlan.zhihu.com/p/521376336 以 将编码更改为 UTF-8 为例 1. 临时修改编码 运行 CMD 输入 chcp 查看当前的代码页 (代码页和国家/地 ...
- 【解决一个小问题】macbook m2 上交叉编译 gozstd
作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 已知 zstd 是一个优秀的压缩库,gozstd封装了这个 ...