java函数式接口的使用-自定义函数接口@FunctionalInterface消除if else和内置4大函数式接口

1.自定义函数接口@FunctionalInterface消除if else

@FunctionalInterface
public interface MyFunction<T, R> {R apply(T... t);
}

import com.google.common.collect.Maps;import java.util.Map;/*** 自定义函数消除if else*/
public class MyFunctionTest {//(自定义)一般在静态块中添加private static final Map<String, MyFunction<Object, String>> map = createMap();//1.初始化函数,代替if else中去执行的函数private static Map<String, MyFunction<Object, String>> createMap() {Map<String, MyFunction<Object, String>> map = Maps.newHashMap();map.put("A", MyFunctionTest::fun01);map.put("B", MyFunctionTest::fun02);map.put("C", MyFunctionTest::fun03);return map;}public static void main(String[] args) {String type = "A";// 以前的if-else
//        if(type.equals("A")){
//            fun01("a", 1);
//        }else if(type.equals("B")){
//            fun02("b", 2);
//        }else if(type.equals("C")){
//            fun03("c", 3);
//        }// 优化的if-elsemap.get(type).apply("a", 1);}/*** 函数3* @param o* @return*/private static String fun03(Object... o) {System.out.println("fun03=====>");for (Object o1 : o) {System.out.println(o1);}return "CCC";}/*** 函数2* @param o* @return*/private static String fun02(Object... o) {System.out.println("fun02=====>");for (Object o1 : o) {System.out.println(o1);}return "BBB";}/*** 函数1* @param o* @return*/private static String fun01(Object... o) {System.out.println("fun01=====>");for (Object o1 : o) {System.out.println(o1);}return "AAA";}}

2.内置4大函数式接口:

Consumer消费型接口 T void 对类型为T的对象应用操作,包含方法:void accept(T t)
Supplier供给型接口 无 T 返回类型为T的对象,包含方法:T get()
Function<T,R>函数型接口 T R 对类型为T的对象应用操作,并返回结果为R类型的对象。包含方法:R apply(T t)
Predicate断言型接口 T boolean 确定类型为T的对象是否满足某约束,并返回boolean值。包含方法:boolean test(T t)

  • 分别给出例子
package org.zz.flink_cdc.if_else;import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;/**
* 内置4大函数式接口:
*      Consumer<T>消费型接口	T	void	对类型为T的对象应用操作,包含方法:void accept(T t)
*      Supplier<T>供给型接口	无	T	返回类型为T的对象,包含方法:T get()
*      Function<T,R>函数型接口	T	R	对类型为T的对象应用操作,并返回结果为R类型的对象。包含方法:R apply(T t)
*      Predicate<T>断言型接口	T	boolean	确定类型为T的对象是否满足某约束,并返回boolean值。包含方法:boolean test(T t)
* 分别给出例子
*/
public class Example {public static void main(String[] args) {//1. 对传入的对象执行某种操作// 用于处理或消费数据,执行某些操作但不返回结果。常见于对集合元素的处理,如打印、修改对象属性等Consumer<String> printConsumer = s -> {System.out.println(s);};printConsumer.accept("1.Hello, Consumer!");//2. 提供一个对象,不接受任何参数//用于提供或生成数据,不需要输入参数。常见于延迟计算、对象工厂、获取默认值等场景Supplier<String> stringSupplier = () -> "2.Hello, Supplier!";System.out.println(stringSupplier.get());//3.将输入对象转换为另一种类型的输出//用于转换数据,将输入对象转换为另一种类型的输出。常见于数据处理、类型转换、映射操作等场景Function<String, Integer> lengthFunction = s -> s.length();int length = lengthFunction.apply("3.Hello, Function!");System.out.println("Length: " + length);//4. 判断输入对象是否满足某个条件//用于判断或筛选数据,返回布尔值。常见于条件判断、过滤操作、验证等场景Predicate<String> isEmptyPredicate = s -> s.isEmpty();boolean isEmpty = isEmptyPredicate.test("");System.out.println("4.Is empty: " + isEmpty);}
}

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

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

相关文章

ubuntu系统下如何安装python

在Ubuntu系统下安装Python&#xff0c;有多种方法可供选择。以下是两种常见的方法&#xff1a; 一、使用apt包管理器安装 安装步骤如下&#xff1a; 首先更新软件包列表 sudo apt update安装Python 3&#xff1a; 输入以下命令以安装Python 3&#xff08;Ubuntu的默认Pyth…

如何将 Apifox 的自动化测试与 Jenkins 集成?

CI/CD &#xff08;持续集成/持续交付&#xff09; 在 API 测试 中的主要目的是为了自动化 API 的验证流程&#xff0c;确保 API 发布到生产环境前的可用性。通过持续集成&#xff0c;我们可以在 API 定义变更时自动执行功能测试&#xff0c;以及时发现潜在问题。 Apifox 支持…

二叉树的最近公共祖先-二叉树

236. 二叉树的最近公共祖先 - 力扣&#xff08;LeetCode&#xff09; ​ 递归 lson、rson左右子树&#xff1b; 深度优先遍历&#xff0c;遍历到p或者q就返回ture&#xff1b; class Solution { public:TreeNode* ans;bool dfs(TreeNode* root, TreeNode* p, TreeNode* q){i…

墨烯的C语言技术栈-C语言基础-004

三.变量,常量 生活中有些值是不变的 有些值是可变的 // 变量和常量功能 // 变量分为 局部变量 和 全局变量 int b 20; 全局变量 int main() { short age 20; // 年龄 局部变量 int high 180; // 身高 局部变量 float weight 88.5 // 体重 局部变量 return 0;…

GoLand 2024 for Mac GO语言集成开发工具环境

Mac分享吧 文章目录 效果一、下载软件二、开始安装1、双击运行软件&#xff08;适合自己的M芯片版或Intel芯片版&#xff09;&#xff0c;将其从左侧拖入右侧文件夹中&#xff0c;等待安装完毕2、应用程序显示软件图标&#xff0c;表示安装成功3、打开访达&#xff0c;点击【文…

CAN学习笔记

学习链接&#xff1a;CAN学习笔记&#xff08;1&#xff09;_can sjw-CSDN博客 内容全部取自链接&#xff0c;非原创。用于自己学习和记录&#xff0c;如有错误请指正。如果侵权了&#xff0c;请联系我删掉。 CAN主要有两种物理层&#xff0c;1.闭环的ISO11898 2.开环的ISO1…

Hadoop3:NameNode和DataNode多目录配置(扩充磁盘的技术支持)

一、NameNode多目录 1、说明 NameNode多目录&#xff0c;需要在刚搭建Hadoop集群的时候&#xff0c;就配置好 因为&#xff0c;配置这个&#xff0c;需要格式化NameNode 所以&#xff0c;如果一开始没配置NameNode多目录&#xff0c;后面&#xff0c;就不要配置了。 2、配置…

数据库组成及原理

属性&#xff1a; 把数据库中的一个表类比成一个公司&#xff0c;那么公司里的每个人都是一个“属性”&#xff08;表中的一个字段视为一个属性&#xff09;&#xff0c;不管老板还是员工&#xff0c;只要是公司里的人&#xff0c;就都是一个属性。 主键&#xff1a; 老板就是“…

网络安全 文件上传漏洞-20 第二十关 Pass-20

点击进入第二十关&#xff0c;并选择显示代码&#xff1a; $is_upload false; $msg null; if(!empty($_FILES[upload_file])){//检查MIME$allow_type array(image/jpeg,image/png,image/gif);if(!in_array($_FILES[upload_file][type],$allow_type)){$msg "禁止上传该…

vector模拟实现【C++】

文章目录 全部的实现代码放在了文章末尾准备工作包含头文件定义命名空间和类类的成员变量 迭代器迭代器获取函数 构造函数默认构造使用n个值构造迭代器区间构造解决迭代器区间构造和用n个值构造的冲突拷贝构造 析构函数swap【交换函数】赋值运算符重载emptysize和capacityopera…

N5 使用Gensim库训练Word2Vec模型

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊# 前言 前言 这周学习训练一个Word2Vec模型&#xff0c;并进行一些基本的词向量操作。 Word2Vec 模型 Word2Vec 是一种基于神经网络的词向量表示方法&#x…

mysql8.0为什么要移除查询缓存,对应又做了哪些优化,进来看看,一定获益匪浅

前言 MySQL 查询缓存是一个用于缓存查询结果的机制&#xff0c;通过减少对数据库的重复查询来提高性能。在 MySQL 5.7 及其之前的版本中&#xff0c;查询缓存的实现主要依赖于哈希表和内存管理。当查询字符串完全匹配且表未发生变动时&#xff0c;查询缓存可以显著提高查询性能…

HMI 的 UI 风格成就经典

HMI 的 UI 风格成就经典

力扣61. 旋转链表(java)

思路&#xff1a;用快慢指针找到最后链表k个需要移动的节点&#xff0c;然后中间断开节点&#xff0c;原尾节点连接原头节点&#xff0c;返回新的节点即可&#xff1b; 但因为k可能比节点数大&#xff0c;所以需要先统计节点个数&#xff0c;再取模&#xff0c;看看k到底需要移…

MySQL之高可用性(二)

高可用性 避免单点失效 找到并消除系统中的可能失效的单点&#xff0c;并结合切换到备用组件的机制&#xff0c;这是一种通过减少恢复时间(MTTR)来改善可用性的方法。如果你够聪明&#xff0c;有时候甚至能将实际的恢复时间降低至0&#xff0c;但总的来说这很困难。(即使一些…

16. Java的 Unsafe 类方法介绍

1. 前言 本节内容主要是对 Unsafe 类方法进行介绍&#xff0c;JDK jar 包中的 Unsafe 类提供了硬件级别的原子性操作&#xff0c;Unsafe 类中的方法都是 native 方法&#xff0c;它们使用 JNI 的方式访问本地 C&#xff0b;&#xff0b;实现库。 本节我们来了解一下 Unsafe 提…

目标检测技术概述与最新进展

目标检测技术概述与最新进展 一、引言 目标检测是计算机视觉中的一个重要研究方向&#xff0c;旨在在图像或视频中识别并定位目标对象。它在自动驾驶、智能安防、医疗影像分析等领域有着广泛的应用。本文将介绍目标检测的经典方法和最新进展&#xff0c;并给出相关论文的链接…

Python数据可视化书籍推荐:利用Python进行数据分析

《利用Python进行数据分析》 这本书几乎是数据分析入门必读书了 主要介绍了python 3个库numpy&#xff08;数组&#xff09;&#xff0c;pandas&#xff08;数据分析&#xff09;和matplotlib&#xff08;绘图&#xff09;的学习 阅读本书可以获得一份关于在Python下操作、处…

Rustdesk如何编译代码实现安装后不会显示主界面,不会在右下角出现托盘图标,作为后台服务运行

环境&#xff1a; Rustdesk1.1.9 问题描述&#xff1a; Rustdesk如何编译代码实现安装后不会显示主界面&#xff0c;不会在右下角出现托盘图标&#xff0c;作为后台服务运行 解决方案&#xff1a; 可以自定义进程名称和图标&#xff0c;不会显示主界面&#xff0c;不会在…

LLM大模型中LoRA是什么?面试经验回答汇总(2024.7月最新)

目录 1 什么是 LoRA&#xff1f; 2 LoRA 的思路是什么&#xff1f; 3 LoRA 的特点是什么&#xff1f; 4 简单描述一下 LoRA? 5 QLoRA 的思路是怎么样的&#xff1f; 6 QLoRA 的特点是什么&#xff1f; 7 AdaLoRA 的思路是怎么样的&#xff1f; 8 LoRA权重是否可以合入…