常用的函数式接口_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. vue3中的四种插槽的介绍-保证让你看看的明明白白!

    插槽 当组件中只有一个插槽的时候,我们可以不设置 slot 的 name 属性. v-slot 后可以不带参数,但是 v-slot 在没有设置 name 属性的时候, 插槽口会默认为"def ...

  2. axios源码解析 - 请求方法的别名实现

    axios中的创建请求方式很多,比如axios(url),axios.get(url),axios.post(url),axios.delete(url),方便快捷的api设计让axios火得一塌糊涂 ...

  3. 命令行参数 getopt模块

    getopt中的函数: getopt.getopt(sys.argv[1:], shortopts, longopts=[]) args指的是当前脚本接收的参数,它是一个列表,可以通过sys.argv ...

  4. 【FAQ】申请华为运动健康服务授权的4个常见问题及解决方法

    华为运动健康服务(HUAWEI Health Kit)提供原子化数据开放,在获取用户对数据的授权后,应用可通过接口访问运动健康数据,对用户数据进行增.删.改.查等操作,为用户提供运动健康类数据服务.这 ...

  5. Angular核心概念

    一.集成开发环境@angular/cli IE8之后才有debugger工具 2009,nodejs发布,前端Big Bang 1.1 基于NodeJS的工具链 打包工具 grunt 对js代码做合并 ...

  6. k8s的api资源

    NAME SHORTNAMES APIGROUP NAMESPACED KIND 资源用途说明 bindings     TRUE Binding 已弃用.用于记录一个object和另一个object ...

  7. 二叉树遍历在Unity中的实现

    前言:今天放一天,想到要放国庆假了就心烦气躁,躺床上又焦虑,回想起面试官的一副扑克脸,马上跳起来看了看数据结构. 今天复习了二叉树,包括一些基本概念和特性,当看到二叉树遍历的章节时,马上联想到了Uni ...

  8. CF Divan and Kostomuksha

    题意:NKOJ CF 思路:首先发现贪心不了.因此dp.然后这题需要维护的就\(g_i\)和\(sum{g_i}\) 状态:\(dp[i]\): 当前最后一个为\(g_i\)的最大值 \(dp[i]= ...

  9. C# 类继承中的私有字段都去了哪里?

    最近在看 C++ 类继承中的字段内存布局,我就很好奇 C# 中的继承链那些 private 字段都哪里去了? 在内存中是如何布局的,毕竟在子类中是无法访问的. 一:举例说明 为了方便讲述,先上一个例子 ...

  10. 用C语言实现井字棋(人人/AI人机)--完结版

    目录 用C语言实现井字棋(人人/AI人机)--完结版 BUG与优化3: 1. 修改了step的计算方法,每个玩家玩完就加一次step 2. 改变了电脑下棋的逻辑,每个玩家玩完之后都跳过这次循环 源码: ...