Java8关于Function接口

news2025/1/25 9:17:04

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.coloradmin.cn/o/1575812.html

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

相关文章

JVM从1%到99%【精选】-初步认识

目录 &#x1f95e;1.什么是JVM &#x1f37f;2.JVM的功能 &#x1f953;3.常见的JVM &#x1f32d;4.JVM的位置 &#x1f9c2;5.JVM的整体结构 &#x1f383;6.JVM的生命周期 &#x1f388;7.JVM的架构模型 1.什么是JVM JVM本质上是一个运行在计算机上的程序,他的职责…

WPS快速将插入Excle数据插入Word

前置条件&#xff1a; 一张有标题、数据的excle表格word中的表格与excle表格标题对应或包含电脑已经安装WPS软件 第一步、根据word模板设计excle模板&#xff0c;标头对应 第二步、word上面选【引用】--【邮件】&#xff0c;选打开数据源&#xff0c;找到excle文件&#xff0c;…

vscode-插件开发-hello world-创建初始模板

参考vscode官方示例&#xff1a;如何创建你的第一个插件开发项目模板的步骤进行了下文操作。 目录 前言1.环境配置全局安装 yo, generator-code 2. 新建一个插件项目模板问题1: F5 按键无法启动launch.json调试(解决)问题1 描述:问题1: 找错误问题1: 可行的解决方案 3. 开发插…

Linux部署sonarqube+Gogs+Jenkins(二)

Linux部署sonarqubeGogsJenkins 一、Jenkins执行任务1、使用源码管理拉取代码-操作步骤第一步&#xff1a;确认环境&#xff0c;进入到Jenkins【系统管理】—>【全局工具配置】—>【Git】为下图显示&#xff1b;第二步&#xff1a;构建项目时对项目的源码管理选择 Git第三…

基于R语言地理加权回归、主成份分析、判别分析等空间异质性数据分析教程

原文链接&#xff1a;基于R语言地理加权回归、主成份分析、判别分析等空间异质性数据分析教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247600473&idx6&sn431e9408a42862d29fe4f4ef7703595b&chksmfa8208becdf581a820d9479d2aa61b88e96612c4ab72b0…

系统架构评估_2.SAAM方法

SAAM&#xff08;Scenarios-based Architecture Analysis Method&#xff09;是卡耐基梅隆大学软件工程研究所&#xff08;SEI at CMU&#xff09;的Kazman等人于1983年提出的一种非功能质量属性的架构分析方法&#xff0c;是最早形成文档并得到广泛使用的软件架构分析方法。最…

设计方案:914-基于64路AD的DBF波束形成硬件

一、硬件概述 &#xff24;&#xff22;&#xff26;技术的实现全部是在数字域实现&#xff0c;然而天线阵列接收的信号经过多次混频后得到的中频信号是模拟信号&#xff0c;实现&#xff24;&#xff22;&#xff26;处理并充分发挥&#xff24;&#xff22;&…

pdf操作器(图片转文字、PDF转word、PDF拆分、图片jpg、png互转)

pdf操作器&#xff08;不用联网图片转文字、PDF转word、PDF拆分、图片jpg、png互转&#xff09;介绍目前该软件实现了以下功能 pdf转wordpdf拆分图片&#xff0c;图片导出在桌面的一个文件夹里图片合并为pdf压缩、转换图片格式&#xff08;jpg和png&#xff09;OCR图片转文字&…

如何在社交媒体中使用增强现实来提高客户参与度?

目录 1. 增强现实在社交媒体中的应用是如何发展的 2. 社交媒体营销和广告中的增强现实 3. 社交媒体上的增强现实滤镜和镜头 4. 社交媒体平台上的增强现实购物 5. 利用社交媒体的增强现实事件和品牌激活 6. 增强现实在社交媒体中的未来是什么 7. 社交媒体中的增强现实常见…

xilinx 7系列fpga上电配置

一、前言 Xilinx FPGA通过加载比特流到内部存储单元来进行配置。 Xilinx FPGA存在两种数据配置路径&#xff0c;一种是满足最小引脚需求的串行路径&#xff0c;一种是可用8位、16位或32位来连接到行业的高性能通用接口&#xff0c;如处理器&#xff0c;8位或者16位并行的闪存…

轻量化日志中心 Grafana Loki

需要集中的日志系统的原因 目前现状,每个服务生产上有三台,定位生产问题,需要连上一台机器,然后使用 cd / tail / less / grep / sed / awk 等 linux命令去日志里查找故障原因。如果在这台机器没搜索到线索,就去另外两台机器上查日志。 但在分布式系统中,众多服务分散部…

链路代价信息、链路状态信息(链路状态通告LSA)

链路代价信息"link cost information" 通常指的是**在网络中&#xff0c;数据包从一个节点传输到另一个节点所需承担的“成本”或者“开销”&#xff0c;这个概念常用于路由算法和网络设计中**。以下是一些关键要点&#xff1a; 1. **路径开销**&#xff1a;路径开…

吹爆!遥感高光谱分类(Python)

目录 一、数据集下载 二、安装包 三、数据处理 四、模型训练 五、模型推理 六、踩坑记录 一、数据集下载 Hyperspectral Remote Sensing Scenes - Grupo de Inteligencia Computacional (GIC) (ehu.eus) Installing SPy — Spectral Python 0.21 documentation 二、安装…

企业计算机服务器中了locked勒索病毒怎么办,locked勒索病毒解密流程步骤

网络技术的不断发展为企业的生产运营提供了极大便利&#xff0c;也让企业的生产效率大大提高&#xff0c;但网络是一把双刃剑&#xff0c;给给企业的数据安全问题带来严重威胁。近期&#xff0c;云天数据恢复中心接到浙江某商贸公司的求助&#xff0c;企业计算机服务器遭到了lo…

HBase详解(2)

HBase 结构 HRegion 概述 在HBase中&#xff0c;会从行键方向上对表来进行切分&#xff0c;切分出来的每一个结构称之为是一个HRegion 切分之后&#xff0c;每一个HRegion会交给某一个HRegionServer来进行管理。HRegionServer是HBase的从节点&#xff0c;每一个HRegionServ…

阿里云乱扣费故障,技术堪忧

2024年4月3日&#xff0c;距离2023年11月的故障没有多久&#xff0c;阿里云又出现乱扣费故障&#xff0c;导致账号欠费3000多&#xff0c;oss&#xff0c;块存储&#xff0c;cdn等所有后付费服务停止工作&#xff0c;不知道这个故障能算什么级别的。 凌晨1点多&#xff0c;收到…

RStudio数据分析及简单作图

R语言是一种用于统计计算与绘图的编程语言&#xff0c;它免费、开源&#xff0c;被广泛应用于统计分析、数据挖掘等领域。是应用于统计计算和统计制图的优秀工具。 完整代码放在最后 一、数据收集 所使用数据下载自GEO(https://www.ncbi.nlm.nih.gov/geoprofiles/)网站&…

开源免费的MySQL和MariaDB图形化管理软件

2024年4月7日&#xff0c;周日凌晨 有很多开源免费的MySQL和MariaDB图形化管理界面可供选择。 以下是一些常用的工具&#xff1a; phpMyAdmin&#xff1a;phpMyAdmin 是一个用 PHP 编写的免费开源的 MySQL 和 MariaDB 管理工具&#xff0c;它提供了一个基于 Web 的界面&#…

GPT-5将在6月发布前进行「红队进攻测试」

“GPT-5将在6月发布”的消息刷屏了AI朋友圈。这则消息之所以被无数人相信并转发&#xff0c;是因为已经有不少技术人员在社交平台上晒出了「红队进攻测试」邀请。 基于 GPT系列庞大的用户体量和影响力&#xff0c;OpenAI 将更加重视GPT-5 的安全性&#xff0c;作为GPT-5上市前的…

Azure runbook 使用用户托管标识查看资源状态

Azure runbook 使用用户托管标识查看资源状态 在托管标识里创建用户托管标识在被查看或变更资源进行授权创建自动化账号和runbook发布脚本添加计划 在托管标识里创建用户托管标识 在被查看或变更资源进行授权 这里是选取的Analysis Services 资源 创建自动化账号和runbook 发布…