Java学习笔记——函数式接口

一、函数式接口概述

函数式接口:有且仅有一个抽象方法的接口。
Java中的函数式编程体现就是Lambda表达式,所以函数式接口就是可以适用于
Lambda表达式使用的接口。只有确保接口中有且仅有一个抽象方法,Java中的
Lambda表达式才能顺利地进行推导。可以在接口定义的上方加上一个注解@FunctionalInterface来表示该接口是一个
函数式接口。如下所示:
@FunctionalInterface
public interface MyInterface {void show();
}

二、常用的四种函数式接口

1、Supplier接口
Supplier<T>接口包含了一个无参的方法:
(1)T get():获得结果,该方法不需要参数,它会根据某种逻辑返回一个数据。Supplier<T>接口也被称作生产性接口,get方法返回的数据类型和泛型中指定的数据类型一致。
例如:
public static void main(String[] args) {//Lambda表达式String s1 = getString(() -> "asdf");System.out.println(s1);//Lambda表达式int i = getInteger(() -> 2);System.out.println(i);}//定义一个方法返回整数private static Integer getInteger(Supplier<Integer> s) {return s.get();}//定义一个方法返回字符串数据private static String getString(Supplier<String> s) {return s.get();}
2、Consumer接口
Consumer<T>接口包含两个方法:
(1)void accept(T t):对给定的参数进行操作
(2)default Consumer<T> andThen(Consumer after):返回一个组合Consumer
依次执行此操作然后执行after操作。Consumer<T>接口也被称作消费接口,消费的数据类型由泛型决定。
public static void main(String[] args) {operatorString("杨玉环", s -> System.out.println(new StringBuilder(s).reverse()));System.out.println("-----------");operatorString("王昭君", s -> System.out.println(new StringBuilder(s).reverse()), s -> System.out.println(s));}//定义一个方法消费字符串,用不同的方式消费同一个字符串两次private static void operatorString(String s, Consumer<String> c1, Consumer<String> c2) {
//        c1.accept(s);
//        c2.accept(s);c1.andThen(c2).accept(s);}//定义一个方法消费字符串private static void operatorString(String s, Consumer<String> c) {c.accept(s);}
运行结果:环玉杨-----------君昭王王昭君

3、Predicate接口
Predicate<T>接口常用的有四个方法:
(1) boolean test(T t) 对给定参数进行判断,返回一个布尔值
(2) default Predicate<T> negate() 返回一个逻辑的否定,对应逻辑非
(3) default Predicate<T>  and(Predicate other) 返回一个组合判断,对
应短路与。
(4) default Predicate<T> or(Predicate other) 返回一个组合判断,对
应短路或。
public static void main(String[] args) {boolean b = checkString("aa", s1 -> s1.equals("aa"));System.out.println(b);boolean b1 = checkString("hello", s1 -> s1.length() > 3);System.out.println(b1);System.out.println("=============");boolean b2 = checkString("helloworld", s1 -> s1.equals("aa"), s2 -> s2.length() > 12);System.out.println(b2);}//判断给定的字符串是否满足要求private static boolean checkString(String s, Predicate<String> p) {
//        return p.test(s);return p.negate().test(s);}//同一个字符串给出两个不同的判断,最后把这两个判断的结果做逻辑与运算的结果作为最终结果private static boolean checkString(String s, Predicate<String> p1, Predicate<String> p2) {
//        boolean b1 = p1.test(s);
//        boolean b2 = p2.test(s);
//
//        return b1 && b2;
//        return p1.and(p2).test(s);return p1.or(p2).test(s);}
4、Function接口
Function<T,R>接口有两个常用方法:
(1) R apply(Function<T,R>) 将此函数应用于给定的参数
(2)default <V> Function<T,​V>	andThen​(Function<? super R,​? extends V> after)	
返回首先将此函数应用于其输入的 after函数,然后将 after函数应用于结果。Function<T,R>接口常用于对参数进行操作转换,然后返回一个新的值。
public static void main(String[] args) {convert("1000", s -> Integer.parseInt(s));convert(100, s1 -> String.valueOf(s1));convert("200", s -> Integer.parseInt(s), s2->String.valueOf(s2+100));}//定义一个方法把字符串类型转换成int类型并输出private static void convert(String s, Function<String, Integer> f) {Integer i = f.apply(s);System.out.println(i);}//定义一个方法,把一个int类型的数加上一个整数后转换成字符串后输出private static void convert(Integer i, Function<Integer, String> f) {int result = i + 100;String s = f.apply(result);System.out.println(s);}//定义一个方法把一个字符串转换成int类型,把int加上一个整数后,转换成字符串private static void convert(String s, Function<String, Integer> f1, Function<Integer, String> f2) {String apply = f1.andThen(f2).apply(s);System.out.println(apply);}

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

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

相关文章

windows快捷键

F1 显示当前程序或者windows的帮助内容。 F2 当你选中一个文件的话&#xff0c;这意味着“重命名” F3 当你在桌面上的时候是打开“查找&#xff1a;所有文件” 对话框 F10或ALT 激活当前程序的菜单栏 windows键或CTRLESC 打开开始菜单 CTRLALTDELETE 在win9x中打开关闭程序对话…

最简单的拨号方案

使用模式匹配和通道变量可以构建一个最简单的最通用的拨号方案。 如下&#xff1a; exten > _XXXX,1,Dial(SIP/${EXTEN}) exten > _XXXX,2,Hangup() 模式匹配规则&#xff1a; 模式总是用一个下划线 _开始&#xff0c;它告诉 Asterisk 要做模式匹配&#xff0c;这不是…

tortoisegit图标消失_TortoiseGit文件夹和文件图标不显示解决方法

今天下载一个demo导入之后发现一个问题&#xff0c;提示导入的R包只有系统默认的 没有项目的&#xff0c;可以看下图 这种情况出现呢不多&#xff0c;但是出现了我就记录下&#xff0c;这个先看看R文件是不是还在 点击Gen包 查看 看看R文件是不是还在&#xff0c;打开一看果然不…

丰田pcs可以关闭吗_丰田新款卡罗拉变化这么大 让老车主陷入沉思

【太平洋汽车网 导购频道】小胖是一名95后的汽车编辑&#xff0c;年纪轻轻又从事汽车编辑这一岗位&#xff0c;大家可能会觉得他肯定是一位充满热血、喜欢驾驶、热爱汽车的年轻人&#xff0c;那如果我告诉你小胖的座驾是一辆老卡罗拉(询底价|查参配)&#xff0c;你还会觉得小胖…

Java学习笔记——Stream流

一、Stream流的生成方式 1、collection集合可以用默认方法stream生成流。 如 ArrayList<String> list new ArrayList<String>();list.stream().forEach(); 2、Map集合间接生成 3、数组通过Stream接口的静态方法of(T... values)生成流。二、Stream流的中间操作方法…

Excel VBA遍历文件

休息日&#xff0c;无聊的上Excel Home看看有啥东东可学习&#xff0c;有啥问题能帮帮忙。看到很多帖子都是求助遍历特定文件夹下文件的实现方法。有朋友说03版Excel有FileSearch对象可以遍历文件夹下文件&#xff0c;07版中没有了FileSearch对象&#xff0c;不知如何遍历文件。…

C++中的explicit关键字

在C程序中很少有人去使用explicit关键字&#xff0c;不可否认&#xff0c;在平时的实践中确实很少能用的上。再说C的功能强大&#xff0c;往往一个问题可以利用好几种C特性去解决。但稍微留心一下就会发现现有的MFC库或者C标准库中的相关类声明中explicit出现的频率是很高的。了…

pline加点lisp_用Autolisp 在AutoCAD中实现多种曲线的绘制

用Autolisp 在AutoCAD中实现多种曲线的绘制一、引言&#xff1a;AutoCAD自1982年由Autodesk公司推出以来&#xff0c;经历了20年的发展更新&#xff0c;目前&#xff0c;已深入到包括机械、建筑、服装、航天航空、地质气象等等的众多领域中。AutoCAD已成为众多工程设计人员的首…

python从小白到大牛pdf 下载 资源共享_Kotlin从小白到大牛 (关东升著) 中文pdf高清版[12MB]...

本书是一本Kotlin语言学习立体教程&#xff0c;主要内容包括&#xff1a;Kotlin语法基础、Kotlin编码规范、数据类型、字符串、运算符、程序流程控制、函数、面向对象基础、继承与多态、抽象类与接口、高阶函数、Lambda表达式、数组、集合、函数式编程API、异常处理、线程、协程…

MySQL——基本配置

一、新建配置文件 在MySQL的安装目录下D:\Mysql\mysql-8.0.28-winx64\bin中新建一个文本文件&#xff0c;文件内容如下&#xff1a; [mysql] default-character-setutf8[mysqld] character-set-serverutf8 default-storage-engineINNODB sql_modeSTRICT_TRANS_TABLES,NO_ZERO_…

iphone win7无法识别_win7系统电脑不能识别iphone苹果设备的解决方法

win7系统使用久了&#xff0c;好多网友反馈说win7系统电脑不能识别iphone苹果设备的问题&#xff0c;非常不方便。有什么办法可以永久解决win7系统电脑不能识别iphone苹果设备的问题&#xff0c;面对win7系统电脑不能识别iphone苹果设备故障问题&#xff0c;我们只需要1)你的苹…

SOCKET bind INADDR_LOOPBACK和INADDR_ANY的区别

今天写程序时候&#xff0c;服务器端启动了&#xff0c;然后客户端总是连接不上&#xff0c;connect返回错误号是10061&#xff0c;服务器积极拒绝请求。 用telnet连接一下端口&#xff0c;发现服务端服务没有开启&#xff0c;但是我程序是启动的&#xff0c;用netstat -a 命令…

在mac上用文本编辑器写python_Mac系统Python解释器、PyCharm编辑器安装及使用方法详解...

『环境配置』- 工欲善其事&#xff0c;必先利其器 视频讲解教程&#xff1a;[Mac系统Python开发环境配置教程详解&#xff08;Python技术客栈&#xff09;](https://www.bilibili.com/video/av80761677)【开发环境配置】Mac系统Python开发环境配置教程详解&#xff08;Python技…

hdu 2149 巴什博弈

http://acm.hdu.edu.cn/showproblem.php?pid2149 分析&#xff1a;就是巴什博弈的概念。 题目要求&#xff1a;对于每组数据&#xff0c;在一行里按递增的顺序输出Lele第一次可以加的价。两个数据之间用空格隔开。如果Lele在第一次无论如何出价都无法买到这块土地&#xff0c;…

MySQL——数据库和表的增删改查

1、DDL操作数据库 ①查询 SHOW DATABASES;②创建 创建数据库 CREATE DATABASE 数据库名称; 创建数据库(判断&#xff0c;如果则创建) CREATE DATABASE IF NOT EXISTS 数据库名称;③删除 删除数据库 DROP DATABASE 数据库名称; 删除数据库(判断&#xff0c;如果存在则删除) DRO…

c_str()

1.string类成员函数c_str()的原型: const char *c_str()const;//返回一个以null终止的c字符串 2.c_str()函数返回一个指向正规c字符串的指针,内容和string类的本身对象是一样的,通过string类的c_str()函数能够把string对象转换成c中的字符串的样式; c_str()函数返回一个指向正规…

45个极具冲击力的WordPress摄影网站模板

原文地址&#xff1a;http://www.goodfav.com/zh/wordpress-photography-website-templates-3577.html 互联网为摄影师和有创意的人想向世界展示自己最好的作品提供了最好的平台。你可以整合社会化媒体可以分享你的世界各地的图片。很多人都会认为&#xff0c;美丽的图画应该有…

python生成多个列表_python生成多个只含0,1元素的随机数组或列表(代码)

python生成多个只含0,1元素的随机数组或列表&#xff08;代码&#xff09; >>> import numpy as np >>> myarray np.random.randint(0,2,10)输出只含0,1元素的一维数组,长度为10 >>> myarray array([1, 1, 1, 0, 1, 0, 0, 1, 1, 0]) >>> m…

Java学习笔记——反射

1、反射概述 Java反射机制&#xff1a;是指在运行时去获取一个类的变量和方法信息。然后通过获取到的信息来创建对象&#xff0c;调用方法的一种机制。由于这种动态性&#xff0c;可以极大地增强程序的灵活性。2、获取Class类的对象 我们要想通过反射去使用一个类&#xff0c…

Linux NULL定义

下面是/usr /include/linux下的stddef.h文件中的NULL定义&#xff1a;#undef NULL#if defined(__cplusplus)#define NULL 0#else#define NULL ((void *)0)#endif