Java8关于Function接口

Java学习-Function接口

  • 1 函数式接口简介和学习地址
  • 2 两种常见的函数式接口
      • 2.1 Runnable:执行接口,不接收参数,也无返回结果。
      • 2.2 Consumer:作为消费接口,接收一个参数,无返回结果。
  • 3 初识
      • 3.1 定义Function接口
          • 3.1.1 定义`ThrowExceptionClass`Function`接口`
          • 3.1.2 定义`BranchHandleDemo`Function`接口`
          • 3.1.3 定义`PrentOrElseDemo`Function`接口`
      • 3.2 定义service类
          • 3.2.1 isTrue方法
          • 3.2.2 isTrueOrFalse方法
          • 3.2.3 isPresent方法
      • 3.3 定义control类
  • 4 总结

1 函数式接口简介和学习地址

函数式接口可以被隐式转换为 lambda 表达式。

函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。

参考地址1:菜鸟教程
参考地址2:B站视频

2 两种常见的函数式接口

2.1 Runnable:执行接口,不接收参数,也无返回结果。

JDK中关于Runnable的定义

2.2 Consumer:作为消费接口,接收一个参数,无返回结果。

JDK中关于Consumer的定义

3 初识

3.1 定义Function接口

  • 首先是接口Interface
  • 其次接口上方写上注解@FunctionalInterface
  • 定义抽象方法[函数式接口只能有且仅有一个方法]
3.1.1 定义ThrowExceptionClassFunction接口
package functioninterfacedemo.util;/*** @author klxz* @description ThrowExceptionClass* @date 2024/4/7*/
@FunctionalInterface
public interface ThrowExceptionClass {/*** throwMessage** @param message message*/void throwMessage(String message);
}
3.1.2 定义BranchHandleDemoFunction接口
package functioninterfacedemo.util;/*** @author klxz* @description BranchHandleDemo* @date 2024/4/7*/
@FunctionalInterface
public interface BranchHandleDemo {/*** trueOrFalseHandler** @param trueHandler trueHandler* @param falseHandler falseHandler*/void trueOrFalseHandler(Runnable trueHandler, Runnable falseHandler);
}
3.1.3 定义PrentOrElseDemoFunction接口
package functioninterfacedemo.util;import java.util.function.Consumer;/*** @author klxz* @description PrentOrElseDemo* @date 2024/4/7*/
@FunctionalInterface
public interface PrentOrElseDemo<T extends Object> {/*** presentOrElseHandler** @param consumer consumer* @param falseAction falseAction*/void presentOrElseHandler(Consumer<? super T> consumer, Runnable falseAction);
}

3.2 定义service类

  • 命名为service目的是让大家明白这个是执行类
3.2.1 isTrue方法
  • 调用isTrue方法
  • 接收control传入的参数flag
  • 如有异常则进行Function接口ThrowExceptionClass 的处理
3.2.2 isTrueOrFalse方法
  • 调用isTrueOrFalse方法
  • 接收control传入的参数flag
  • 如有异常则进行Function接口BranchHandleDemo的处理
  • Runnable不需要接收参数,直接调用run()执行
  • 如果flag为true,则进行trueHandler.run()处理
  • 如果flag为false,则进行falseHandler.run()处理
3.2.3 isPresent方法
  • 调用isPresent()方法
  • 接收control传入的参数obj
  • 如有异常则进行Function接口PrentOrElseDemo的处理
  • Consumer需要接收一个参数,但不返回结果
  • 如果obj不为null则进行action.accept(obj)处理
  • Runnable不需要接收参数,直接调用run()执行
  • 如果obj为null则进行trueHandler.run()处理
package functioninterfacedemo;import functioninterfacedemo.util.BranchHandleDemo;
import functioninterfacedemo.util.PrentOrElseDemo;
import functioninterfacedemo.util.ThrowExceptionClass;/*** @author klxz* @description 工具类* @date 2024/4/7*/
public class ServiceClass {public static ThrowExceptionClass isTrue(boolean flag) {return (message) -> {if (!flag) {System.out.println("current is " + message + "!");}};}public static BranchHandleDemo isTrueOrFalse(boolean flag) {return ((trueHandler, falseHandler) -> {if (flag) {trueHandler.run();} else {falseHandler.run();}});}public static PrentOrElseDemo<?> isPresent(String obj) {return (action, runnable) -> {if (obj != null) {action.accept(obj);} else {runnable.run();}};}
}

3.3 定义control类

分别调用service中的三个方法查看运行结果

package functioninterfacedemo;/*** @author klxz* @description 练习函数式接口的demo* @date 2024/4/7*/
public class ControlClass {public static void main(String[] args) {// 传参为true,调用throwMessage方法ServiceClass.isTrue(true).throwMessage("current is false!");// 传参为false,调用throwMessage方法ServiceClass.isTrue(false).throwMessage("current is false!");// 传参为true,调用trueOrFalseHandler方法ServiceClass.isTrueOrFalse(true).trueOrFalseHandler(() -> {System.out.println("this is true handler!");}, () -> {System.out.println("this is false handler!");});// 传参为false,调用trueOrFalseHandler方法ServiceClass.isTrueOrFalse(false).trueOrFalseHandler(() -> {System.out.println("this is true handler!");}, () -> {System.out.println("this is false handler!");});// 传参不为null,调用presentOrElseHandler方法ServiceClass.isPresent("hello world!").presentOrElseHandler(System.out::println, () -> {System.out.println("current object is null!");});// 传参为null,调用presentOrElseHandler方法ServiceClass.isPresent(null).presentOrElseHandler(System.out::println, () -> {System.out.println("current object is null!");});}
}

4 总结

通过Function可以很优雅的写出业务逻辑代码,让代码看起来清爽~

持续学习中,有问题可以在评论区留言交流。

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

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

相关文章

Android详细介绍POI进行Word操作(小白可进)

poi-tl是一个基于Apache POI的Word模板引擎&#xff0c;也是一个免费开源的Java类库&#xff0c;你可以非常方便的加入到你的项目中&#xff0c;并且拥有着让人喜悦的特性。 一、使用poi前准备 1.导入依赖&#xff1a; 亲手测过下面Android导入POI依赖的方法可用 放入这个 …

OSPF实例是什么?

OSPF实例是什么&#xff1f; **OSPF实例指的是一个OSPF路由进程&#xff0c;它是在一个设备上运行的单独的OSPF路由协议实体**。 在详细解释这个概念之前&#xff0c;需要了解OSPF&#xff08;Open Shortest Path First&#xff09;是一种内部网关协议&#xff08;IGP&#x…

hive图形化客户端工具

hive准备 创建测试数据 以root用户登录&#xff0c;使用hive命令启动hive。 创建库 create database testhivedb; 创建表 create table testhivedb.testhivetable( id int ,name string ); 插入数据 insert into testhivedb.testhivetable values (1,cc); insert into…

Vscode连接WSL2当中的jupyter

主要解决办法参考自这篇博客 1. 在WSL当中安装jupyter 这个随便找一篇博客即可&#xff0c;比如这篇&#xff0c;也可以根据现有的环境参考其它博客内容 2. 使用jupyter创建一个虚拟环境 首先激活想要添加的虚拟环境后&#xff0c;输入命令安装库: pip install ipykernel …

HarmonyOS实战开发-如何实现分布式帐号相关的功能。

介绍 本示例主要展示了分布式帐号相关的功能&#xff0c;使用ohos.account.distributedAccount、ohos.account.osAccount等接口&#xff0c;实现了绑定分布式帐号、解绑分布式帐号、更新分布式帐号信息和管理分布式帐号的功能&#xff1b; 效果预览 使用说明 1.首次进入应用会…

Text-Driven Object Detection 关于结合文本的目标检测

1、简单介绍 首先说明&#xff0c;本文目的主要是水一篇CSDN博客&#xff0c;顺便说一下和标题相关的认识。 近几年&#xff0c;在目标检测领域关于多模态的目标检测工作已成了主流&#xff0c;趋势仍在延续&#xff0c;未来仍有很大挖掘空间。这里说的多模态不是简单的多源数…

element-ui使用记录

element-ui的组件名就是类名 样式穿透&#xff08;用来修改没有类名的子组件样式&#xff09; 例如修改头部具名插槽的样式&#xff08;但是无法定位该元素&#xff09; 查看最后生成的html结构中对应的结构&#xff08;这里的头部有类名&#xff0c;可以直接对该类名进行样…

【CicadaPlayer】demuxer_service的简单理解

G:\CDN\all_players\CicadaPlayer-github-0.44\mediaPlayer\SMPMessageControllerListener.cppplayer的demuxer服务类 std::unique_ptr<demuxer_service> mDemuxerService{nullptr};根据option (Cicada::options),可以决定音视频的不同操作,通过 hander可以获得具体使…

SpringCloud Alibaba Sentinel 创建流控规则

一、前言 接下来是开展一系列的 SpringCloud 的学习之旅&#xff0c;从传统的模块之间调用&#xff0c;一步步的升级为 SpringCloud 模块之间的调用&#xff0c;此篇文章为第十四篇&#xff0c;即介绍 SpringCloud Alibaba Sentinel 创建流控规则。 二、基本介绍 我们在 senti…

UltraScale 架构 SelectIO 资源之IODELAY与IOSERDES仿真与使用

平台&#xff1a;vivado2018.3 具体内容见ug571-ultrascale-selectio IDELAYE3 在调试超高速信号的时候&#xff0c;需要使用iodelayiserdes来调试校准输入信号。例如外部某ADC采样率为5GHZ&#xff0c;外部ADC使用2.5GHZ的时钟去采集输入信号。为了实现采集&#xff0c;adc芯…

90天玩转Python—05—基础知识篇:Python基础知识扫盲,使用方法与注意事项

90天玩转Python系列文章目录 90天玩转Python—01—基础知识篇:C站最全Python标准库总结 90天玩转Python--02--基础知识篇:初识Python与PyCharm 90天玩转Python—03—基础知识篇:Python和PyCharm(语言特点、学习方法、工具安装) 90天玩转Python—04—基础知识篇:Pytho…

如何搭建APP分发平台分发平台搭建教程

搭建一个APP分发平台可以帮助开发者更好地分发和管理他们的应用程序。下面是一个简要的教程&#xff0c;介绍如何搭建一个APP分发平台。 1.确定需求和功能&#xff1a;首先&#xff0c;确定你的APP分发平台的需求和功能。考虑以下几个方面&#xff1a; 用户注册和登录&#xff…

Stable Diffusion扩散模型推导公式的基础知识

文章目录 1、独立事件的条件概率2、贝叶斯公式、先验概率、后验概率、似然、证据3、马尔可夫链4、正态分布 / 高斯分布5、重参数化技巧6、期望7、KL散度 、高斯分布的KL散度8、极大似然估计9、ELBO :Evidence Lower Bound10、一元二次方程 1、独立事件的条件概率 A 和 B 是两个…

Vue项目打包成exe文件(electron)

1.将写好的vue项目打包 1.1运行vue ui命令 输出目标文件 如果打开index.html是空白的&#xff0c;而且控制台报错获取xxx资源失败的问题&#xff0c;你需要在vue.config.js 上加一个命令&#xff0c;如果没有你需要创建一个。 2.下载electron官方示例 git clone https://gith…

zdpdjango_argonadmin Django后台管理系统中的常见功能开发

效果预览 首先&#xff0c;看一下这个项目最开始的样子&#xff1a; 左侧优化 将左侧优化为下面的样子&#xff1a; 代码位置&#xff1a; 代码如下&#xff1a; {% load i18n static admin_argon %}<aside class"sidenav bg-white navbar navbar-vertical na…

Python---Numpy线性代数

1.数组和矩阵操作&#xff1a; 创建数组和矩阵&#xff1a;np.array, np.matrix 基本的数组操作&#xff1a;形状修改、大小调整、转置等 import numpy as np# 创建一个 2x3 的数组 A np.array([[1, 2, 3], [4, 5, 6]]) print("数组 A:\n", A)# 将数组 A 转换为矩阵…

趣学前端 | 综合一波CSS选择器的用法

背景 最近睡前习惯翻会书&#xff0c;重温了《HTML5与CSS 3权威指南》。这本书&#xff0c;分上下两册&#xff0c;之前读完了上册&#xff0c;下册基本没翻过。为了对得起花过的每一分钱&#xff0c;决定拾起来近期读一读。 CSS 选择器 在CSS3中&#xff0c;提倡使用选择器…

git bash上传文件至github仓库

Linux运维工具-ywtool 目录 一.访问github二.新建仓库1.点击自己头像2.选择"your repositories"3.点击"New"4.创建新仓库 三.通过git bash软件上传文件1.提示2.打开git bash软件3.切换到本地仓库目录4.配置github的用户名和邮箱信息5.生成SSH Key6.github添…

如何理解图像处理领域的病态问题(ill-posed problem)

ill-posed problem&#xff0c;我们可以理解为病态问题或者不适定问题。在本文中&#xff0c;统一成为不适定问题。 在讨论不适定问题&#xff08;ill-posed problem&#xff09;之前&#xff0c;我们先来看一下什么叫适定性问题&#xff08;well-posed problem&#xff09;。…

MVCC(解决MySql中的并发事务的隔离性)

MVCC 如何保证事务的隔离性&#xff1f; 1.排他锁&#xff1a;如一个事务获取了一个数据行的排他锁&#xff0c;其他事务就不能再获取改行的其他锁。 2.MVCC&#xff1a;多版本并发控制。 MVCC&#xff1a; 1.隐藏字段 1.DB_TRX_ID&#xff1a;最近修改事务的id。默认值从0开…