函数式接口-常见函数式接口-Predicate接口

news/2024/4/20 7:57:28/文章来源:https://www.cnblogs.com/qihaokuan/p/16610399.html

常见函数式接口

JDK提供了大量常用的函数式接口以丰富Lambda的经典使用常见 它们注意在java.util.function包中被提供

Predicate接口

有时候我们需要对某种类型的数据进行判断 从而得到一个boolean值结果 这时可以使用Predicate<T>接口

抽象方法:test

Predicate接口中包含一个抽象方法

boolean test(T t):用来指定数据类型数据进行判断的方法

结果:

符合条件,返回true

不符合条件,返回false

public class BPredicate {//// 判断给定的字符串是否满足要求public static boolean checkString(String s, Predicate<String> pre){return pre.test(s);}public static void main(String[] args) {String s= "abcde";
//        boolean b = checkString(s, (String str)->{
//            return str.length()>5;
//        });
//        System.out.println(b);//优化Lambda表达式boolean b = checkString(s, str->str.length()>5);System.out.println(b);}
}

默认方法:and

既然是条件判断 就会存在与、或、非三种常见的逻辑关系 其中将两个Predicate条件使用与“逻辑连接起来实现”并且的效果 可以使用default方法and

逻辑表达式:可以连接多个判断的条件

&&:与运算符,有false则false

||:或运算符 有true则true

!:非(取反)运算符 非真则假 非假则真

需求:判断一个字符串 有两个判断的条件

1.判断字符串的长度是否大于5

2.判断字符串中是包含a

两个添加必须同时满足 我们就可以使用&&运算符链接两个条件

public class BPredicate1 {/*需求:判断一个字符串 有两个判断的条件1.判断字符串的长度是否大于52.判断字符串中是包含a两个添加必须同时满足 我们就可以使用&&运算符链接两个条件*/public static boolean checkString (String s, Predicate<String> pre1,Predicate<String> pre2){//两种判断形式
//        return pre1.test(s) && pre2.test(s);return pre1.and(pre2).test(s);//相当于return pre1.test(s) && pre2.test(s);
    }public static void main(String[] args) {//定义一个字符串String s = "abcdefj";//调用checkString方法,参数传递字符串和两个Lambda表达式boolean le = checkString(s, (String str)->{return str.length()>9;},(String str)->{return  str.contains("a");});System.out.println(le);}
}

默认方法:or

与and的“与”类似 默认方法or实现逻辑关系中的“或”

需求:判断一个字符串 有两个判断的条件

1.判断字符串的长度是否大于5

2.判断字符串中包含a

满足一个条件即可 我们就可以使用||运算符连接两个条件

    public static boolean checkString (String s, Predicate<String> pre1,Predicate<String> pre2){return pre1.test(s) || pre2.test(s);}public static void main(String[] args) {//定义一个字符串String s = "abcdefj";//调用checkString方法,参数传递字符串和两个Lambda表达式boolean le = checkString(s, (String str)->{return str.length()>9;},(String str)->{return  str.contains("a");});System.out.println(le);}

运行结果:

 默认方法:negate

与、或已经了解了 剩下的“非”(取反)也会简单

需求:判断一个字符串长度是否大于5

如果字符串的长度大于5 那返回false

如果字符串的长度大于5 那么返回true

所以我们可以使用取反符号 对判断的结果进行取反

代码:

 

public class BPredicate2 {/*定义一个方法 方法的参数 传递一个字符串使用Predicate接口判断字符串的长度是否大于5*/public static boolean menth(String s, Predicate<String> pro){return !pro.negate().test(s);}public static void main(String[] args) {//定义一个字符串String s = "abcdefj";//调用checkString方法 参数传递字符串和两个Lambda表达式boolean lm = menth(s, (String str)->{return str.length()>5;});System.out.println(lm);//这次长度并没有大于5所以最后的结果是true
    }
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_2438.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在网站上更改鼠标样式

笔者研究了一下,发现仅通过CSS(不知道还有没有别的方法)没办法达到笔者真正想改变鼠标指针样式的目的 和自己在电脑上安装鼠标指针样式不同,网站上鼠标指针没法根据鼠标指针自身状态而更改样式,而只能通过CSS选择器,根据网页元素的状态来更改鼠标指针样式CSS选择器参考手…

html table 美化-html如何用css美化表格

html用css美化表格的方法:首先创建一个HTML示例文件;然后在body中创建table表格;最后通过style标签给表格添加css样式即可。 代码 下面通过示例来看看。 /*表格样式*/ table {width: 90%;background: #ccc;margin: 10px auto;border-collapse: collapse;/*border-collapse:c…

Live2d Widget

写在最前 最早的时候看别人的博客很多都有一个可爱的看板娘,然后就找了教程给自己也整了一个。因为找到的教程都是稂莠不齐的,原作者自己说的也略显含糊(其实是我自己看不懂)。总之秉承着一如既往的小白风格。把网上的教程做个整合。 效果正式步骤 1.首先克隆仓库: https:…

条条大路通罗马

https://www.acwing.com/problem/content/1579/思路: 最短路里面的经典题型,在最短路的时候维护多个变量。 #include<bits/stdc++.h> #include<unordered_map> using namespace std; const int N = 250; unordered_map<string, int> mp; //对字符串离散化…

我对EE学科知识体系的一点理解

前言 研究生一年级的分都出完了,鉴于学分已经修够了,可以说学生时期上课、写作业、考试的日子也基本上到头了。 有幸高中升大学时挑选了一个自己感兴趣的专业(电子信息工程),学习之路虽然难言轻松,但还是乐在其中的。按照本科4年+研究生1年来算,共5年的学习时间,北京理…

向QtableWidget中添加自定义widget崩溃异常: 0xC0000005

1.问题描述 想给QTableWidget添加QCheckBox,代码如下,tableWidget->setCellWidget老是崩溃(0x0F954E63 (qwindows.dll)处(位于 QStockView.exe 中)引发的异常: 0xC0000005: ),我用的其他的tableWidget添加QCheckBox却是正常的。搞了一天;QCheckBox* pCheckBox = new Q…

basic_find

一直对输入数据进行跟踪 发现整体的混淆架构 main是一个 类似于一种switch的vm 这个题有一个特征 就是如果这题里面一个函数真正有用的话,他会使用很多switch来掩饰 而如果没有往往是简单运作一下就跳过了 所以顺着这个线索去追踪 刚好是最实用的比如在这个函数里 前面几个函数…

10--DSL查询文档-查询分类和基本语法

elasticsearch的查询依然是基于JSON风格的DSL来实现的。DSL查询分类 Elasticsearch提供了基于JSON的DSL(Domain Specific Language)来定义查询。常见的查询类型包括: (1) 查询所有:查询出所有数据,一般测试用。 例如:match_all (2) 全文检索(full text)查询:利用分词器…

2022第六届河南省高等学校信息安全对抗大赛(ISCC2022)——古典

1. 古典 题目提示为古典,下载后发现是一个txt文本,打开ON4W45D3G44TC4TSGU3DKLLOONYXELJUG43TELJYHFXDOLJWOBYXC4JWOEYDQNRTON6Q==== 发现这是个BASE32的解码,利用解码工具的synt{791rr565-nsqr-4772-89n7-6pqqq6q0863s} 然后根据题目提示古典,使用凯撒解码的(因为古典加密…

笔记本网卡总断连,如何使得网卡不自动休眠?

笔记本网卡总断连,如何使得网卡不自动休眠? 总结 家里面的笔记本拿来开机做服务器,但是出门在外的时候没法远程连接回服务器,回到家发现是因为网卡休眠了。很抓狂。 通过以下方法关闭网卡的自动休眠。重新安装网卡驱动修改注册表OK参考 修改注册表 https://www.zhihu.com/q…

硬件结构 硬盘--

CPU 的高速缓存,通常可以分为 L1、L2、L3 这样的三层高速缓存,也称为一级缓存、二级缓存、三级缓存。在 Linux 系统,我们可以通过这条命令,查看 CPU 里的 L1 Cache 「数据」缓存的容量大小: $ cat /sys/devices/system/cpu/cpu0/cache/index0/size 32K 内存用的芯片和 CPU…

linux kernal note

linux kernal note 内核体系结构 内核由五个模块构成 进程调度模块(核心) 内存管理模块 文件系统模块 进程间通信模块 网络接口模块内存管理 内存条分区 内存分为以下几个功能模块:从前到后为内核模块、高速缓存区(包含显存和BIOS ROM)、虚拟盘、主内存区。linux分页分段管…

Hadoop及其三大组件原理

Hadoop是什么? 由Apache基金会开发的分布式系统基础架构 海量数据的存储和分析计算 Hadoop架构历史: 1.0 HDFS和MapReduce 2.0 在1.0基础上增加了YARN(任务调度),解放了MapReduce 3.0 和2.0类似,着重优化 Hadoop优势: 1)高可靠性 多数据副本 2)高扩展性 动态扩展,动态…

Java 断点下载(下载续传)服务端及客户端(Android)代码

原文: Java 断点下载(下载续传)服务端及客户端(Android)代码 - Stars-One的杂货小窝最近在研究断点下载(下载续传)的功能,此功能需要服务端和客户端进行对接编写,本篇也是记录一下关于贴上关于实现服务端(Spring Boot)与客户端(Android)是如何实现下载续传功能 断点下载功能(…

深入flex 中align-items属性

设置外层盒子flex 显示宽度为自己盒子本身宽度 高度被拉高整个盒子设置为垂直方向的对齐方式 align-items:flex-start 盒子不将被拉伸 显示元素本身的高度align-items:center 盒子不将被拉伸 显示元素本身的高度align-items:stretch 元素拉伸

软件测试入门三(软件bug)

一、什么是软件bug 一个手机,如果他的屏幕碎了、裂了,拐角磕碰瑕疵,这些都是手机的缺陷。 软件就好比这款手机,出现了各种各样的问题,就是软件的bug(缺陷) 软件在测试过程中发现的bug,属于正常情况,因为能够在测试过程中被发现得到修改,如果bug出现在线上,就是线上事…

Activiti可视化流程管理器

1.简介 Activiti是一个业务流程管理(BPM)框架,它是覆盖了业务流程管理,工作流,服务协作等领域的一个开源,灵活的,易扩展的可执行流程语言框架。在Java工作流引擎中可谓是主流,我们的项目也是使用的这个框架进行流程相关的开发。与流程息息相关的就是我们的流程定义BPMN文件…

函数式接口-常见函数式接口-Supplier接口

常见函数式接口Supplier接口: java.util.function.Supplier<T>接口仅包含一个无参的方法:T get()。用来获取一个泛型参数指定类型的对象数据。Supplier<T>接口被称之为生产型接口,指定接口的泛型是什么类型,那么接口中的get方法就会生产什么类型的数据 代码:p…

CF(div2)816 A~C

A Crossmarket思维 矩阵走路径,发现走Z字型怎么走都是一样的耗费,所以直接O(1)算出来就好/** |~~~~~~~|* | |* | |* | |*…

聊聊项目中分表的实际应用-2022新项目

一、业务场景Web项目开发中,分表是时常会使用到的方式。分表的一个目的是为了缓解单表数据量过大,导致操作时 性能下降的问题。可是在实际开发中应该如何进行进行分表呢?那种分表方式更符合实际呢? 二、需求分析网上随便去搜索一下就会发现有很多的分表方式,比如常规的垂直…