函数式接口@FunctionalInterface

作用:

该接口标记了引用的接口是一个

函数式接口(SAM:Single Abstract Interface)

即接口内只能有一个抽象方法、可以有一个默认方法、多个静态方法

方法可以使用lambda表达式来传入方法进行调用。

示例:

@FunctionalInterface

public interface TestFunctionalInterface {

int accept(int t);

default int defaultAccept(int t) {

return t + 1;

}

static void staticMethod1() {

System.out.println("test============");

}

static void staticMethod2() {

System.out.println("test1===========");

}

}

class Test {

public static void main(String[] args) {

int result = getResult(10, a -> a + 2);

System.out.println(result);

result = getDefaultResult(10, a -> a);

System.out.println(result);

TestFunctionalInterface.test();

}

private static int getResult(int i, TestFunctionalInterface functionalInterface) {

return functionalInterface.accept(i);

}

private static int getDefaultResult(int i, TestFunctionalInterface functionalInterface) {

return functionalInterface.defaultAccept(i);

}

}

总结:

@FunctionalInterface接口充当标记作用,显式的声明了一个接口只允许一个抽象方法

Consumer接口

(java.util.function.Consumer)

定义了一个accept方法,1个入参无出参。

引申的Consumer接口也是没有出参的。

接口

入参类型

Consumer

T

IntConsumer

int

LongConsumer

long

DoubleConsumer

double

ObjDoubleConsumer

T,double

ObjIntConsumer

T,int

ObjLongConsumer

T,long

BiConsumer

T,U

Consumer的使用

Consumer意味着消费,java这里定义的方法是没有返回值的,只有一个入参。

所以在实际使用的过程中,consumer接口可以用来提交一个无需结果的一个方法。

首先定义一个方法,无返回值,一个对象参数,一个Consumer接口参数。

private static void testConsumer(int a , Consumer action){

action.accept(a);

}

在main方法里调用这个方法,传一个int参数,即lambda表达式作为入参 。

public static void main(String[] args) {

testConsumer(30 , p->{

System.out.println(p);

});

}

其中 p->{},这一块代码为Consumer接口的里accept方法的具体实现,这里将方法作为参数传入到

testConsumer(int a , Consumer action)方法内。

当然,传入的方法只是做了一个简单的打印。

Function接口

(java.util.function.Function)

定义了一个apply方法,1个入参1个出参。

引申的Function接口也是有出参的。

接口

入参类型

出参类型

Function

T

R

DoubleFunction

double

R

IntFunction

int

R

LongFunction

long

R

ToDoubleFunction

T

double

ToIntFunction

T

int

ToLongFunction

T

long

DoubleToIntFunction

double

int

DoubleToLongFunction

double

long

IntToDoubleFunction

int

double

IntToLongFunction

int

long

LongToDoubleFunction

long

double

LongToIntFunction

long

int

BiFunction

T,U

R

ToDoubleBiFunction

T,U

double

ToIntBiFunction

T,U

int

ToLongBiFunction

T,U

long

Predicate接口

(java.util.function.Predicate)

定义了一个test方法,1个入参,一个boolean出参

引申的Predicate接口也是boolean出参

接口

入参类型

Predicate

T

DoublePredicate

double

IntPredicate

int

LongPredicate

long

BiPredicate

T,U

Supplier接口

(java.util.function.Supplier)

定义了一个get方法,无入参1个出参。

引申的Supplier接口也是有出参的。

接口

出参类型

Supplier

T

BooleanSupplier

boolean

DoubleSupplier

double

IntSupplier

int

LongSupplier

long

java lambda函数类型_java8-lambda-函数式接口及四大类型函数接口相关推荐

  1. python内置高阶函数求导_Python——函数式编程、高阶函数和内置函数,及

    Python--函数式编程.高阶函数及内置函数 函数式编程 一.不可变数据:不用变量保存状态不修改变量 二.第一类对象:函数即"变量" 1.函数名可以当做参数传递 2.返回值可以是 ...

  2. 技术图文:Python 匿名函数 VS. C# Lambda表达式

    背景 前段时间在知识星球上立了一个Flag,至少写10篇关于 Python,Matlab 和 C# 对比的总结. 这是第 2 篇,从定义和应用两个角度来对比 Python 的匿名函数 与 C# 的La ...

  3. Java Lambda(语言篇——lambda,方法引用,目标类型,默认方法,函数接口,变量捕获)

    深入理解Java 8 Lambda(语言篇--lambda,方法引用,目标类型和默认方法) 原文链接:http://zh.lucida.me/blog/java-8-lambdas-insideout ...

  4. 深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)

    作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文链接:http://zh.lucida.me/blog/java-8-lambdas-insideout-language- ...

  5. java 拉姆表达式_Java8 lambda表达式10个示例

    Java 8 lambda表达式示例 转自importNew 原文链接 例1.用lambda表达式实现Runnable 我开始使用Java 8时,首先做的就是使用lambda表达式替换匿名类,而实现R ...

  6. Java中lambda表达式去重_JAVA8中Lambda和Stream

    Java8于2014年3月份发布,其主要更新的特性有:函数式接口.Lambda 表达式.集合的流式操作.注解的更新.安全性的增强.IO\NIO 的改进.完善的全球化功能等,本文将介绍Lambda表达式 ...

  7. Jdk1.8新特性(二)——lambda表达式(参数列表)-{}和函数式接口@FunctionalInterface

    Jdk1.8新增lambda表达式是为了简化代码,主要用于简化匿名实现类,为其提供一种更加简洁的写法.Lambda表达式在swift语言中被称为代码块,lambda表达式可以认为是一种特殊的接口,是匿 ...

  8. Lambda01 编程范式、lambda表达式与匿名内部类、函数式接口、lambda表达式的写法...

    1 编程范式 主要的编程范式有三种:命令式编程,声明式编程和函数式编程. 1.1 命令式编程 关注计算机执行的步骤,就是告诉计算机先做什么后做什么 1.2 声明式编程 表达程序的执行逻辑,就是告诉计算 ...

  9. java三目表达式_Java8新特性Lambda表达式

    1 Lambda表达式 对于很多计算机语言来说,Lambda表达式并不是陌生的语法格式,而对于Java而言,它的到来比较晚,直到Java8更新之后,Lambda表达式才正式出现在Java语法中.所以如 ...

最新文章

  1. python学成需要多久-小白学python怎么快速入门?多久能完成一个项目?
  2. 数据结构图之二(最小生成树--克鲁斯卡尔算法)
  3. python第三方插件登录网易音乐_python3-使用requests模拟登录网易云音乐
  4. 简述机器指令与微指令之间的关系_SAP Marketing Cloud功能简述(四) 线索和客户管理...
  5. 由几个月前写的(验证码利用ashx一般处理程序来做),修改为不用以一般处理程序...
  6. docker部署kafka,k8s(helm)部署kafka
  7. 折腾一天,获取下列多选框的所有选中值,原生js可直接通过obj.val()来获取,可jq不行,要通过循环取值来获取;...
  8. transient、volatile关键字
  9. Ali-Tomcat 安装
  10. 只有运用你的逻辑才能看懂其中的恐怖及答案
  11. 最新kali之hping3
  12. 哈希表实现电话号码查询系统
  13. pwnable.kr_mistake
  14. 马未都说收藏:陶瓷篇(6、7)宋代八大民窑
  15. katacontainers网络文件系统分析
  16. LTE的核心网之:MME,SGW,PGW
  17. 基于VUE+H5PLUS 实现app交互蓝牙打印机得功能
  18. win10安装quicktime
  19. android kingroot一键root工具,一键root大师
  20. Linux运维:推荐八款Linux远程连接工具

热门文章

  1. 跨平台的开源的可视化分析工具 Grafana的介绍与使用
  2. 苹果损失超 1000 万美元,前员工被控收回扣、盗窃、欺诈
  3. 2个维度5大方法,让你的微服务在K8s上跑起来
  4. 从JDK 8到JDK 17,GC都有哪些进步?
  5. 谷歌弃用 APK 格式!替代品 AAB 有何优势?
  6. 零拷贝技术在 Java 中为何这么牛?
  7. 阿里马涛:重新定义云时代的开源操作系统 | 人物志
  8. 什么? 搞不定 Redis 分布式锁?
  9. 刚刚收割阿里、腾讯等大厂 Offer,他说这些话一定要和你们说一下
  10. 从「蒸汽时代」到「高铁时代」,SUNMI DevOps 转型之路 | 原力计划