常用的函数式接口_Prodicate接口_默认方法or&negate

OR

  1. package com.yang.Test.PredicateStudy;
  2. import java.util.function.Predicate;
  3. /**
  4. * 需求:判断一个字符串,有两个判断条件
  5. * 1.判断字符串的长度是否大于5
  6. * 2.判断字符串中是否包含a
  7. * 满足一个条件即可,我们就可以使用||运算符链接两个条件
  8. *
  9. * Predicate接口中有一个方法or,表示或者关系,也可以用于连续两个判断条件
  10. * default Predicate<T> and(Predicate<? super T> other){
  11. * Objects.requireNonNull(other);
  12. * return (t) -> this.test(t) || other.test(t);
  13. * }
  14. * 方法内部两个判断条件,也是使用||连接起来的
  15. */
  16. public class PredicateOrStudy {
  17. /**
  18. * 定义一个方法,方法的参数,传递一个字符串
  19. * 传递两个Predicate接口
  20. * 一个用于判断字符串的长度是否大于5
  21. * 一个用于判断字符串中是否包含a
  22. * 满足一个条件即可
  23. */
  24. public static boolean checkString(String s, Predicate<String> pre1, Predicate<String> pre2) {
  25. //return pre1.test(s) || pre2.test(s);
  26. return pre1.or(pre2).test(s);
  27. }
  28. public static void main(String[] args) {
  29. //定义一个字符串
  30. String s = "abc";
  31. //调用checkString方法,参数列表传递字符串和两个Predicate接口
  32. boolean b = checkString(s, message -> {
  33. return message.length() > 5;
  34. }, message -> {
  35. return message.contains("a");
  36. });
  37. System.out.println(b);
  38. }
  39. }

negate

  1. package com.yang.Test.PredicateStudy;
  2. import java.util.function.Predicate;
  3. /**
  4. * 需求:判断一个字符串长度是否大于5
  5. * 如果字符串的长度大于5,那么返回false
  6. * 如果字符串的长度不大于5,那么返回true
  7. * 所以我们可以使用取反符号!对判断的结果进行取反
  8. *
  9. * Predicate接口中有一个方法negate,也表示取反的意思
  10. * default Predicate<T> negate(){
  11. * return (t) -> !test(t);
  12. * }
  13. */
  14. public class PredicateNegateStudy {
  15. /**
  16. * 定义一个方法,方法的参数,传递一个字符串
  17. * 使用Predicate接口判断字符串的长度是否大于5
  18. */
  19. public static boolean checkString(String s, Predicate<String> pre1) {
  20. //return !pre1.test(s);
  21. return !pre1.test(s);
  22. }
  23. public static void main(String[] args) {
  24. //定义一个字符串
  25. String s = "abc";
  26. //调用checkString方法,参数列表传递字符串和Lambda表达式
  27. boolean b = checkString(s, message -> {
  28. return message.length() > 5;
  29. });
  30. System.out.println(b);
  31. }
  32. }

常用的函数式接口_Predicate接口练习_集合信息筛选

题目

数组当中由多条姓名+性别的信息,请通过Predicate接口的拼装将符合要求的字符串筛选到集合ArrayList中,需要同时满足两个条件:

1.必须为女生;

2.名字为4个字。

分析:

定义一个方法

方法的参数传递一个包含人员信息的数组

传递两个Predicate接口,用于对数组中的信息进行过滤

把满足条件的信息存到ArrayList集合中并返回

代码实现:

  1. package com.yang.Test.PredicateStudy;
  2. import java.util.ArrayList;
  3. import java.util.function.Predicate;
  4. /**
  5. * 数组当中由多条姓名+性别的信息,请通过Predicate接口的拼装将符合要求的字符串筛选到集合ArrayList中,
  6. * 需要同时满足两个条件:
  7. * 1.必须为女生;
  8. * 2.名字为4个字。
  9. */
  10. public class Test {
  11. public static void main(String[] args) {
  12. String[] array = {"迪丽热巴,女","古力娜扎,女","马儿扎哈,男","赵丽颖,女"};
  13. //调用filter传递字符串数组和两个Predicate
  14. ArrayList<String> list = filter(array,s -> {
  15. //获取字符串的性别,判断是否为女
  16. return s.split(",")[1].equals("女");
  17. },s -> {
  18. //获取字符串的姓名判断长度是否为4
  19. return s.split(",")[0].length()==4;
  20. });
  21. list.forEach(s -> System.out.println(s));
  22. }
  23. public static ArrayList<String> filter(String[] arr, Predicate<String> pre1, Predicate<String> pre2) {
  24. //定义一个ArrayList集合来存储筛选后的信息
  25. ArrayList<String> list = new ArrayList<>();
  26. //遍历数组,获取数组中的每一个元素
  27. for (String s : arr) {
  28. //使用Predicate中的方法test对获取到的字符串进行判断
  29. boolean b = pre1.and(pre2).test(s);
  30. //对得到的结果进行判断
  31. if (b){
  32. //条件成立添加到集合中
  33. list.add(s);
  34. }
  35. }
  36. //把集合返回
  37. return list;
  38. }
  39. }

运行结果:

常用的函数式接口_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. Jackson通用工具类

    compile group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: '2.11.1' compile group: ...

  2. 低代码 —— 初步认识 Appsmith

    初步认识 Appsmith appsmith 是什么 appsmith 是 github 上的一个开源项目,截至此刻(20220512)有 17.7k Star. Appsmith 是一个低代码.开源 ...

  3. zabbix5.0报错PHP时区未设置(配置参数"date.timezone")

    解决办法 : #1.编辑文件/etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf,取消注释并设置为所在地时区 vim /etc/opt/rh/rh-php72/php- ...

  4. 将Abp移植进.NET MAUI项目(一):搭建项目

    ​ 前言 去年12月份做了MAUI混合开发框架的调研,想起来文章里给自己挖了个坑,要教大家如何把Abp移植进Maui项目,由于篇幅限制,将分为三个章节. 将Abp移植进.NET MAUI项目(一):搭 ...

  5. vue3 迫不得已我硬着头皮查看了keepalive的源代码,解决了线上的问题

    1.通过本文可以了解到vue3 keepalive功能 2.通过本文可以了解到vue3 keepalive使用场景 3.通过本文可以学习到vue3 keepalive真实的使用过程 4.通过本文可以学 ...

  6. 深入C++05:运算符重载

    运算符重载 1.复数类 运算符重载目的:使对象运算表现得和编译器内置类型一样: 复数类例子 #include<iostream> using namespace std; class CC ...

  7. c++ 乘法逆元

    主要参考:OI-WIKI 为什么要逆元 当一个题目让你求方案数时常要取余,虽然 \((a+b)\% p=(a\% p+b\% p)\%p\) \((a-b)\% p=(a\% p-b\% p)\%p\ ...

  8. 开发工具-SVG占位图片

    更新日志 2022年6月10日 初始化链接. https://toolb.cn/imageholder

  9. generatorConfig.xml自动生成实体类,dao和xml

    <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE generatorConfiguration ...

  10. BPC 脚本

    // //税款计算(现金流) // //2018年5月11日修改,去除之前的送数逻辑,新增BADI计算相关科目 // *SELECT(%010804ZH%, "ID", " ...