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),但是没有此注解的但是只有一个抽象方法的接 ...
随机推荐
- window-子系统-ubuntu
window-子系统-ubuntu 1. 背景 提供类Linux开发环境(命令行.文件系统.进程管理.网路) 2. 安装 A. wsl 安装 下载链接: https://wslstorestorage ...
- [转帖]ORA-01450 maximum key length (3215) exceeded
一. 问题背景 给一个业务表online建索引时遇到了ORA-01450 maximum key length (3215) exceeded报错,看字面意思是字段太长了,检查表字段类型发现基本都是n ...
- Nginx长连接学习之二
Nginx长连接学习之二 背景 距离最开始学习Nginx的长连接已经一年半; 距离最开始学习Linux的TCP内核参数也已经过去了一年. 最近产品再次出现了TCP链接相关的问题. 因为一开始不知道部署 ...
- [转帖]分享6个SQL小技巧
https://www.jianshu.com/p/2fcf0a4e83b7 简介 经常有小哥发出疑问,SQL还能这么写?我经常笑着回应,SQL确实可以这么写.其实SQL学起来简单,用起来也简单, ...
- [转帖]使用Transformers推理
https://github.com/ymcui/Chinese-LLaMA-Alpaca/wiki/%E4%BD%BF%E7%94%A8Transformers%E6%8E%A8%E7%90%86 ...
- CPU实际频率查看
cat /sys/devices/system/cpu/cpu3/cpufreq/cpuinfo_cur_freq
- [转帖]45个处理字符串的Python方法
https://baijiahao.baidu.com/s?id=1738413163267646541&wfr=spider&for=pc 一.题目解析 先来看一个题目: 判断用 ...
- [转帖]2.6 The jcmd Utility
https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr006.html#BABEJDGE The j ...
- 【技术剖析】7. 看看毕昇 JDK 团队是如何解决 JVM 中 CMS 的 Crash
[技术剖析]7. 看看毕昇 JDK 团队是如何解决 JVM 中 CMS 的 Crashhttps://bbs.huaweicloud.com/forum/thread-168485-1-1.html ...
- postman中monitor的使用
monitor就是一个摸鱼的功能,我们把写好的接口部署到postman的web服务器中, 绑定自己的邮箱,运行结果会发送到自己的邮箱中,不用实时监控,是个非常方便 的功能(不安全) 1.crete a ...