当前位置: 首页 > news >正文

Java8中的函数式接口(你知道几个?)

人生如棋,我愿为卒,行动虽慢,谁曾见我后退半步! 👊👊👊

文章目录

    • 前言
    • 1. Supplier
    • 2. Consumer
    • 3. Function
    • 4. UnaryOperator
    • 5. BiFunction
    • 6. Predicate

前言

Java 8对于程序员的主要好处在于它提供了更多的编程工具和概念,能以更快,更重要的是能以更为简洁、更易于维护的方式解决新的或现有的编程问题。今天来探究一下Java8中的函数式接口

函数式接口的定义:类型是接口,有且只有一个抽象方法

函数式接口一般都用@FunctionalInterface注解进行标注,当一个接口打上@FunctionalInterface注解之后就声明为一个函数式接口,这个接口中就只能有一个抽象方法,大于一个抽象方法就会报错。

Java8中的函数式接口

在这里插入图片描述

不管什么,先来它一个 hello world练练手

1. Supplier

没有输入,只有一个输出T

普通函数写法:

private String generalFunction(){
    return "hello world"";
}

函数式编程:

// 恭喜你,已经掌握第一步 hello world
Supplier<String> supplier = () -> "hello world";

有没有很简洁的感觉。

测试:

在这里插入图片描述

2. Consumer

只有一个输入,没有输出

普通函数写法:

private void generalFunction(String i){
    System.out.println("this is a " + i);
}

函数式编程:

Consumer<String> consumer = i -> System.out.println("this is a " + i);

测试:
在这里插入图片描述

3. Function

输入T ,输出R

普通函数写法:

//计算一个数的平方
private int generalFunction(Integer i) {
    return i * i;
}

函数式编程:

Function<Integer, Integer> function = i -> i * i;

测试:
在这里插入图片描述

4. UnaryOperator

输入、输出都是 T

普通函数写法:

private int generalFunction(Integer i) {
    return i * i;
}

函数式编程:

UnaryOperator<Integer> unaryOperator = i -> i * i;

测试:
在这里插入图片描述

UnaryOperatorFunction的专门化,用于操作数和结果具有相同类型的情况。

5. BiFunction

输入T 、U, 输出 R

普通函数写法:

// 计算两个数相乘,并输出:x*j=?
private String generalFunction(Integer i, Integer j) {
    return i + "*" + j + "=" + i * j;
}

函数式编程:

BiFunction<Integer, Integer, String> biFunction = (i, j) -> i + "*" + j + "=" + i * j;

测试:
在这里插入图片描述

6. Predicate

输入T ,输出boolean

普通函数写法:

// 判断一个字符串是否是 hello
private boolean generalFunction(String s) {
    return "hello".equals(s);
}

函数式编程:

Predicate<String> predicate = "hello"::equals;

测试:
在这里插入图片描述

。。。。。。

除了以上介绍的,还有很多函数接口,看懂了这几个的定义方式 再去学习其他的一看就懂


完整代码已上传 Gitee Spring整合常用组件 欢迎Star👍

到此,本章内容就介绍完啦,如果有帮助到你 欢迎点个赞👍👍👍吧!!您的鼓励是博主的最大动力! 有问题评论区交流。

相关文章:

  • JavaScript-jQuery
  • 十分钟学会动态路由
  • Docker高级-2.DockerFile与微服务打包案例
  • Django--ORM 常用字段及属性介绍
  • y122.第七章 服务网格与治理-Istio从入门到精通 -- 流量治理实战进阶(八)
  • 【Mysql】Mysql视图、触发器、存储过程、游标
  • 0902(045天 集合框架09 总结点 问)
  • 算法学习-贪心问题(持续更新中)
  • SpringBoot+Shiro+JWT实现授权
  • 与归并排序相关的一些问题
  • 【C语言拓展】缓冲区、结构体大小计算、命令行参数
  • 《华为数据之道》总结
  • java基于springboot+vue+elementui的会员制在线读书图书购物管理平台
  • python:数据类型、编码方式(base64、utf--8)、python中的进制、\u,\x,0x区别
  • 操作系统中的进程是什么?(详细讲解进程调度相关PCB信息)
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • Elasticsearch 参考指南(升级前重新索引)
  • HTTP--网络协议分层,http历史(二)
  • Java 最常见的 200+ 面试题:面试必备
  • java8 Stream Pipelines 浅析
  • js中forEach回调同异步问题
  • log4j2输出到kafka
  • MD5加密原理解析及OC版原理实现
  • node学习系列之简单文件上传
  • redis学习笔记(三):列表、集合、有序集合
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • sublime配置文件
  • Vue2 SSR 的优化之旅
  • XML已死 ?
  • 第2章 网络文档
  • 关于List、List?、ListObject的区别
  • 简单数学运算程序(不定期更新)
  • 判断客户端类型,Android,iOS,PC
  • 入门到放弃node系列之Hello Word篇
  • 十年未变!安全,谁之责?(下)
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 突破自己的技术思维
  • 微服务核心架构梳理
  • 我是如何设计 Upload 上传组件的
  • 异常机制详解
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • (33)STM32——485实验笔记
  • (C#)一个最简单的链表类
  • (C++20) consteval立即函数
  • (差分)胡桃爱原石
  • (二)pulsar安装在独立的docker中,python测试
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (九十四)函数和二维数组
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default