常用的函数式接口_Prodicate接口_默认方法or&negate和常用的函数式接口_Predicate接口练习_集合信息筛选
常用的函数式接口_Prodicate接口_默认方法or&negate
OR
package com.yang.Test.PredicateStudy;
import java.util.function.Predicate;
/**
* 需求:判断一个字符串,有两个判断条件
* 1.判断字符串的长度是否大于5
* 2.判断字符串中是否包含a
* 满足一个条件即可,我们就可以使用||运算符链接两个条件
*
* Predicate接口中有一个方法or,表示或者关系,也可以用于连续两个判断条件
* default Predicate<T> and(Predicate<? super T> other){
* Objects.requireNonNull(other);
* return (t) -> this.test(t) || other.test(t);
* }
* 方法内部两个判断条件,也是使用||连接起来的
*/
public class PredicateOrStudy {
/**
* 定义一个方法,方法的参数,传递一个字符串
* 传递两个Predicate接口
* 一个用于判断字符串的长度是否大于5
* 一个用于判断字符串中是否包含a
* 满足一个条件即可
*/
public static boolean checkString(String s, Predicate<String> pre1, Predicate<String> pre2) {
//return pre1.test(s) || pre2.test(s);
return pre1.or(pre2).test(s);
}
public static void main(String[] args) {
//定义一个字符串
String s = "abc";
//调用checkString方法,参数列表传递字符串和两个Predicate接口
boolean b = checkString(s, message -> {
return message.length() > 5;
}, message -> {
return message.contains("a");
});
System.out.println(b);
}
}
negate
package com.yang.Test.PredicateStudy;
import java.util.function.Predicate;
/**
* 需求:判断一个字符串长度是否大于5
* 如果字符串的长度大于5,那么返回false
* 如果字符串的长度不大于5,那么返回true
* 所以我们可以使用取反符号!对判断的结果进行取反
*
* Predicate接口中有一个方法negate,也表示取反的意思
* default Predicate<T> negate(){
* return (t) -> !test(t);
* }
*/
public class PredicateNegateStudy {
/**
* 定义一个方法,方法的参数,传递一个字符串
* 使用Predicate接口判断字符串的长度是否大于5
*/
public static boolean checkString(String s, Predicate<String> pre1) {
//return !pre1.test(s);
return !pre1.test(s);
}
public static void main(String[] args) {
//定义一个字符串
String s = "abc";
//调用checkString方法,参数列表传递字符串和Lambda表达式
boolean b = checkString(s, message -> {
return message.length() > 5;
});
System.out.println(b);
}
}
常用的函数式接口_Predicate接口练习_集合信息筛选
题目
数组当中由多条姓名+性别的信息,请通过Predicate接口的拼装将符合要求的字符串筛选到集合ArrayList中,需要同时满足两个条件:
1.必须为女生;
2.名字为4个字。
分析:
定义一个方法
方法的参数传递一个包含人员信息的数组
传递两个Predicate接口,用于对数组中的信息进行过滤
把满足条件的信息存到ArrayList集合中并返回
代码实现:
package com.yang.Test.PredicateStudy;
import java.util.ArrayList;
import java.util.function.Predicate;
/**
* 数组当中由多条姓名+性别的信息,请通过Predicate接口的拼装将符合要求的字符串筛选到集合ArrayList中,
* 需要同时满足两个条件:
* 1.必须为女生;
* 2.名字为4个字。
*/
public class Test {
public static void main(String[] args) {
String[] array = {"迪丽热巴,女","古力娜扎,女","马儿扎哈,男","赵丽颖,女"};
//调用filter传递字符串数组和两个Predicate
ArrayList<String> list = filter(array,s -> {
//获取字符串的性别,判断是否为女
return s.split(",")[1].equals("女");
},s -> {
//获取字符串的姓名判断长度是否为4
return s.split(",")[0].length()==4;
});
list.forEach(s -> System.out.println(s));
}
public static ArrayList<String> filter(String[] arr, Predicate<String> pre1, Predicate<String> pre2) {
//定义一个ArrayList集合来存储筛选后的信息
ArrayList<String> list = new ArrayList<>();
//遍历数组,获取数组中的每一个元素
for (String s : arr) {
//使用Predicate中的方法test对获取到的字符串进行判断
boolean b = pre1.and(pre2).test(s);
//对得到的结果进行判断
if (b){
//条件成立添加到集合中
list.add(s);
}
}
//把集合返回
return list;
}
}
运行结果:

常用的函数式接口_Prodicate接口_默认方法or&negate和常用的函数式接口_Predicate接口练习_集合信息筛选的更多相关文章
- 常用的函数式接口_Predicate接口_默认方法and和Predicate接口练习_集合接口筛选
默认方法:and 既然是条件判断,就会存在与.或.非三种常见的逻辑关系.其中将两个Preadicate条件使用"与"逻辑连接起来实现"并且"的效果时,可以使用d ...
- Java 8——接口中个的默认方法和静态方法
在Java SE 8之前,interface只是事物的抽象,用来定义统一的抽象事物和描述事物的抽象行为和属性. 但是在Java SE 8中,增加了可以在interface中增加默认实现的行为和事物的静 ...
- JDK8新特性:接口的静态方法和默认方法
在jdk8之前,interface之中可以定义变量和方法,变量必须是public.static.final的,方法必须是public.abstract的.由于这些修饰符都是默认的,所以在JDK8之前, ...
- JAVA_接口_默认方法&静态方法
1.小结(注意): 1.接口中无法定义成员变量,但是可以定义常量,其值不可以改变,默认使用public static final修饰 2.接口中,没有构造方法,不能创建对象 3.接口中,没有静态代码块 ...
- Java自学-接口与继承 默认方法
默认方法 步骤 1 : 什么是默认方法 默认方法是JDK8新特性,指的是接口也可以提供具体方法了,而不像以前,只能提供抽象方法 Mortal 这个接口,增加了一个默认方法 revive,这个方法有实现 ...
- Java8中的默认方法
作者:汤圆 个人博客:javalover.cc 前言 大家好啊,我是汤圆,今天给大家带来的是<Java8中的默认方法>,希望对大家有帮助,谢谢 文章纯属原创,个人总结难免有差错,如果有,麻 ...
- Java8新特性_接口中的默认方法
默认方法由来猜想 1. Collection接口.Collections公共类. 同是操作集合,为啥要搞俩?没必要.在接口中搞一些默认实现,一个接口即搞定了. 2. Java8支持Lambda表达式 ...
- Java8新特性第2章(接口默认方法)
在Java中一个接口一旦发布就已经被定型,除非我们能够一次性的更新所有该接口的实现,否者在接口的添加新方法将会破坏现有接口的实现.默认方法就是为了解决这一问题的,这样接口在发布之后依然能够继续演化. ...
- jdk8系列一、jdk8 Lamda表达式语法、接口的默认方法和静态方法、supplier用法
一.简介 毫无疑问,Java 8是Java自Java 5(发布于2004年)之后的最重要的版本.这个版本包含语言.编译器.库.工具和JVM等方面的十多个新特性. 在本文中我们将学习这些新特性,并用实际 ...
随机推荐
- this-3
this是什么?JavaScript中,this关键词指的是他所属的对象:它拥有不同的值,具体取决于它的使用位置. 1.在单独情况下,this指向全局对象window:2.在函数中,this指向全局对 ...
- Glide源码解析二---into方法
转载请标明出处,维权必究: https://www.cnblogs.com/tangZH/p/12543154.html Glide作为一个强大的图片加载框架,已经被android官方使用,所以,明白 ...
- AQS源码探究之竞争锁资源
AQS源码探究---竞争锁资源 我们进入ReentrantLock源码中查看其内部类 Sync 对AQS进行扩展公共方法并定义抽象方法的抽象类 FaireSync 实现公平锁的AQS的实现类 UnFa ...
- Mathtype无限试用
PS:本文方法参考网上搜集的内容,仅做记录. 首先,默认大家都已安装Mathtype软件.如果没装的话,安装下就行.建议安装Mathtype国际版软件,因为国产mathtype会延长失败.如果失败的话 ...
- 『忘了再学』Shell基础 — 16、位置参数变量
目录 1.位置参数变量$n 2.位置参数变量$*和$@ 3.位置参数变量$# 位置參数变量的作用主要用于脚本的传参. 位置參数变量的名称和作用都是确定不能改变的,但是该变量的内容是可以更改的,也就是变 ...
- 关于加密通道规范,你真正用的是TLS,而非SSL
摘要:事实上我们现在用的都是TLS,但因为历史上习惯了SSL这个称呼,平常还是以SSL为多. 本文分享自华为云社区<SSL和TLS的联系及区别>,作者: HZDX. TLS/SSL是一种加 ...
- 每天一个 HTTP 状态码 204
204 No Content 204 No Content 表示服务器成功地处理了客户端的请求,但是没有任何要响应的内容.API 设计上,在用 PUT 请求更新某个资源成功后,后端可以在 HTTP 响 ...
- 我用 AntV/S2 买了一套房
背景 经过一年多的摇号,我在前两天收到了某网红盘的摇中通知.还沉浸在摇中房屋喜悦中的我,很快被售房顾问告知选房的人很多,每位购房者的选房时间都很短,必须 一分钟内 快速选房.并且,排在 400 多号的 ...
- JUnit 5 - Nested Test 内嵌测试
本文地址:https://www.cnblogs.com/hchengmx/p/15158658.html 1. Nested用来解决什么问题 简单地说,Nested用来解决,随着Case越来越多,C ...
- C#实现[移除文件名中的非中文字符]
更新记录: 2022年5月28日 从程序中抽出方法复用. 处理财务文件时写的一个小函数.用于移除文件名中的非中文字符. /// <summary> /// 移除文件名中的非中文字符 /// ...