常用的函数式接口_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接口练习_集合信息筛选的更多相关文章

  1. 常用的函数式接口_Predicate接口_默认方法and和Predicate接口练习_集合接口筛选

    默认方法:and 既然是条件判断,就会存在与.或.非三种常见的逻辑关系.其中将两个Preadicate条件使用"与"逻辑连接起来实现"并且"的效果时,可以使用d ...

  2. Java 8——接口中个的默认方法和静态方法

    在Java SE 8之前,interface只是事物的抽象,用来定义统一的抽象事物和描述事物的抽象行为和属性. 但是在Java SE 8中,增加了可以在interface中增加默认实现的行为和事物的静 ...

  3. JDK8新特性:接口的静态方法和默认方法

    在jdk8之前,interface之中可以定义变量和方法,变量必须是public.static.final的,方法必须是public.abstract的.由于这些修饰符都是默认的,所以在JDK8之前, ...

  4. JAVA_接口_默认方法&静态方法

    1.小结(注意): 1.接口中无法定义成员变量,但是可以定义常量,其值不可以改变,默认使用public static final修饰 2.接口中,没有构造方法,不能创建对象 3.接口中,没有静态代码块 ...

  5. Java自学-接口与继承 默认方法

    默认方法 步骤 1 : 什么是默认方法 默认方法是JDK8新特性,指的是接口也可以提供具体方法了,而不像以前,只能提供抽象方法 Mortal 这个接口,增加了一个默认方法 revive,这个方法有实现 ...

  6. Java8中的默认方法

    作者:汤圆 个人博客:javalover.cc 前言 大家好啊,我是汤圆,今天给大家带来的是<Java8中的默认方法>,希望对大家有帮助,谢谢 文章纯属原创,个人总结难免有差错,如果有,麻 ...

  7. Java8新特性_接口中的默认方法

    默认方法由来猜想 1. Collection接口.Collections公共类.  同是操作集合,为啥要搞俩?没必要.在接口中搞一些默认实现,一个接口即搞定了. 2. Java8支持Lambda表达式 ...

  8. Java8新特性第2章(接口默认方法)

    在Java中一个接口一旦发布就已经被定型,除非我们能够一次性的更新所有该接口的实现,否者在接口的添加新方法将会破坏现有接口的实现.默认方法就是为了解决这一问题的,这样接口在发布之后依然能够继续演化. ...

  9. jdk8系列一、jdk8 Lamda表达式语法、接口的默认方法和静态方法、supplier用法

    一.简介 毫无疑问,Java 8是Java自Java 5(发布于2004年)之后的最重要的版本.这个版本包含语言.编译器.库.工具和JVM等方面的十多个新特性. 在本文中我们将学习这些新特性,并用实际 ...

随机推荐

  1. UART串口及Linux实现

    UART,全称Universal Asynchronous Receiver Transmitter,通用异步收发器,俗称串口.作为最常用的通信接口之一,从8位单片机到64位SoC,一般都会提供UAR ...

  2. 基于 range 的 for 循环和 auto

    基于 range 的 for 循环和 auto C++11 引入一种循环的新形式,叫基于 range 的 for 循环,它允许我们用更简单易读的形式遍历容器中的所有元素 vector<int&g ...

  3. 交互式 .Net 容器版

    背景介绍 在之前的文章 - 交互式 .Net 中已经介绍了什么是交互式 .Net,文中是通过 Visual Studio Code 插件的方式实现交互式 .Net 的.现在,我们将使用容器的方式实现交 ...

  4. django小项目,使用paramiko自动备份网络设备配置

    原来公司开发团队人员众多,有专门对接运维需求的开发人员,现在想要实现些功能可(只)以(能)自己写了-_- |   周末在家无事,用django搞个简单的功能练练手 django安装,配置 sudo p ...

  5. 使用 VS Code + Markdown 编写 PDF 文档

    背景介绍 作为一个技术人员,基本都需要编写技术相关文档,而且大部分技术人员都应该掌握 markdown 这个技能,使用 markdown 来编写并生成 PDF 文档将会是一个不错的体验,以下就介绍下如 ...

  6. 【数据库】MySQL如何删除索引

    1.查看表上的索引 -- 查看table_name表上的索引 show index from table_name ; 2.删除表上的索引 删除索引可以使用ALTER TABLE或DROP INDEX ...

  7. 1.还不会部署高可用的kubernetes集群?看我手把手教你使用二进制部署v1.23.6的K8S集群实践(上)

    公众号关注「WeiyiGeek」 设为「特别关注」,每天带你玩转网络安全运维.应用开发.物联网IOT学习! 本章目录: 0x00 前言简述 0x01 环境准备 主机规划 软件版本 网络规划 0x02 ...

  8. Node.js的多版本管理工具 gnvm(win环境)的详细安装教程(图解步骤、通俗易懂、亲测有效)

    前言 本篇随笔主要写了如何安装并使用node多版本管理工具gnvm(windowns环境下) 作为自己对多版本工具gnvm知识的总结与笔记. 百度云盘gnvm应用程序包 获取链接(个人应用地址如下): ...

  9. [python][flask] Flask 图片上传与下载例子(支持漂亮的拖拽上传)

    目录 1.效果预览 2.新增逻辑概览 3.tuchuang.py 逻辑介绍 3.1 图片上传 3.2 图片合法检查 3.3 图片下载 4.__init__.py 逻辑介绍 5.upload.html ...

  10. Spring IOC源码研究笔记(2)——ApplicationContext系列

    1. Spring IOC源码研究笔记(2)--ApplicationContext系列 1.1. 继承关系 非web环境下,一般来说常用的就两类ApplicationContext: 配置形式为XM ...