文章目录

  • 一、函数式接口

一、函数式接口

  • 定义:有且仅有一个抽象方法的接口
  • 定义解释:
    1、为什么要求有且仅有一个抽象方法?
    只有确保接口中有且仅有一个抽象方法,Java中的Lambda才能顺利地进行推导,因为Java中的Lambda可以被当做是匿名内部类的“语法糖”(见第2点),但是二者在原理上不同。
    2、什么是语法糖?
    “语法糖"是指使用更加方便,但是原理不变的代码语法。例如在遍历集合时使用的foreach语法,其实底层的实现原理仍然是迭代器,这便是“语法糖”。从应用层面来讲,Java中的Lambda可以被当做是匿名内部类的“语法糖”,但是二者在原理上是不同的。
    3、匿名内部类?
    这里简单举个例子,如果你完全不懂什么是匿名内部类还要去查相关资料
    例如,一个方法需要一个类的对象作为参数,但是你只有这个类的接口,不想因为某个方法单独写具体的实现类,这时你可以通过”匿名内部类“来实现这个接口来实现传参,而不必单独的去实现这个类。
    匿名内部类示例:
//peolpe类
public interface People {public abstract String getName();
}
//car类
public class Car {//driveCar方法需要people类的实例public String driveCar(People people) {return people.getName() + " driving car !";}public static void main(String[] args) {Car car = new Car();String whoDrivingCar = car.driveCar(//people的匿名内部类new People() {@Overridepublic String getName() {return "lbw";}});System.out.println(whoDrivingCar);}
}
  • 应用:一般作为方法的参数或者方法的返回值
  • 函数式接口改造示例:
    给接口加上@FunctionalInterface注解保证有且仅有一个抽象方法
@FunctionalInterface
public interface People {public abstract String getName();
}

将匿名内部类改写成lambada的简化写法

public class Car {public String driveCar(People people) {return people.getName() + " driving car !";}public static void main(String[] args) {Car car = new Car();String whoDrivingCar = car.driveCar(//匿名内部类//()里写参数//->lambada符号//{}里写实现() -> {return "lbw";});System.out.println(whoDrivingCar);}}
  • 常用的函数式接口:
    1、生产型Supplier:返回泛型中指定类型的数据
public class SupplierTest {//泛型为stringpublic static String getName(Supplier<String> supplier) {return supplier.get();}public static void main(String[] args) {//返回StringString name = getName(() -> {return "小明";});System.out.println(name);}
}

2、消费型:Consumer:消费泛型中指定类型数据

ublic class ConsumerTest {//    反转字符串public static void reverseString(String name, Consumer<String> consumer) {consumer.accept(name);}public static void main(String[] args) {reverseString("1234567", (String name) -> {System.out.println(new StringBuffer(name).reverse().toString());});}
}

3、转换型Function:将前者类型转换为后者类型

public class FunctionTest {public static Integer transfer(String string, Function<String, Integer> function) {return function.apply(string);}public static void main(String[] args) {System.out.println(transfer("100",(String string) -> {return Integer.parseInt(string);}));}
}

4、真假型Predicate:对传入数据进行判断,得到Boolean类型结果

public class PredicateTest {public static boolean isFlag(String string, Predicate<String> predicate) {return predicate.test(string);}public static void main(String[] args) {boolean flag = isFlag("奥利粤", (string) -> {return "奥利奥".equals(string);});System.out.println(flag==true?"真的奥利奥":"假的奥利奥");}
}

函数式接口(都2020了,该学学Java8了)相关推荐

  1. java8 Lambda表达式的应用(函数式接口、lambda表达式,方法引用及Stream API)

    之前写了一篇博客简单介绍了一下java 8发布新增的一些特性功能,java 8在2014年发布,距今也不少年了,但是lambda表达式使用并不熟练,现在一边学习,一边记录一下. 目录 一.Lambda ...

  2. 玩转Java8的 Stream 之函数式接口

    作者:litesky www.jianshu.com/p/2338cabc59e1 函数式接口是伴随着Stream的诞生而出现的,Java8Stream 作为函数式编程的一种具体实现,开发者无需关注怎 ...

  3. Java8函数式接口与Lambda表达式

    摘要 何为函数式接口? 什么是lambda表达式,lambda表达式的本质: 函数式接口与lambda表达式的联系:lambda是实现函数式接口的一个快捷方式,可以作为函数式接口的一个实例: 常用Ja ...

  4. java 8 函数式接口_必看:通俗易懂地告诉你什么是java8中的“函数式接口”

    花10分钟认真的看完一篇文章,或许会有意想不到的收获 java8发布已经好几年了,相信很多小伙伴都使用过java8,java8这版本带来了很多新特性,其中一个就是"函数式接口",今 ...

  5. Java新特性:Java8函数式接口与Lambda表达式(一)

    摘要 何为函数式接口? 什么是lambda表达式,lambda表达式的本质: 函数式接口与lambda表达式的联系:lambda是实现函数式接口的一个快捷方式,可以作为函数式接口的一个实例: 常用Ja ...

  6. java8新特性_乐字节-Java8新特性-函数式接口

    上一篇小乐带大家学过 Java8新特性-Lambda表达式,那什么时候可以使用Lambda?通常Lambda表达式是用在函数式接口上使用的.从Java8开始引入了函数式接口,其说明比较简单:函数式接口 ...

  7. Java8新特性之函数式接口,呦呦呦

    什么时候可以使用 Lambda?通常 Lambda 表达式是用在函数式接口上使用的.从 Java8 开始引入了函数式接口,其说明比较简单:函数式接口(Functional Interface)就是一个 ...

  8. java interface 函数_java8函数式接口(Functional Interface)

    介绍 函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口. 函数式接口可以被隐式转换为 lambda 表达式(箭头函数). 函数式接口代 ...

  9. 未公开接口主要指以下哪几类_Java8的 Stream 函数式接口,你了解多少?

    点击蓝色"程序职场"关注我哟 加个"星标",天天和你一起进步 作者:litesky www.jianshu.com/p/2338cabc59e1 函数式接口是伴 ...

  10. comparator接口_8000字长文让你彻底了解 Java 8 的 Lambda、函数式接口、Stream 用法和原理

    我是风筝,公众号「古时的风筝」.一个兼具深度与广度的程序员鼓励师,一个本打算写诗却写起了代码的田园码农! 文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在 ...

最新文章

  1. XIV Open Cup named after E.V. Pankratiev. GP of Europe
  2. 五大晶元厂的内存型号命名方式
  3. hdu 4607 Park Visit 求树的直径
  4. c 多文件全局变量_C语言开发单片机为啥都是全局变量形式?
  5. 图片怎么等比缩放_mac图像缩放工具Teorex iResizer
  6. Java 中的 String 真的是不可变的吗
  7. Qt5\MinGw编译器快速解决-QMYSQL driver not loaded问题
  8. c++ 11 中for循环新增的用法(基于范围的for循环)
  9. mongodb详细优化策略方案
  10. Ubuntu下安装ssh与配置
  11. 土建中级工程师考试用书电子版_真的!2020年湖南土建中级职称考试用书是没有指定的教材?...
  12. 全球与中国莨菪碱市场深度研究分析报告
  13. R语言中dim函数_R语言入门:函数介绍(3)—— %gt;%
  14. Gitter有趣的软件安装界面
  15. android拷机工具,如何科学理解麒麟9000的拷机功耗?
  16. 使用certbot生成https证书
  17. python读取oracle数据库性能_python 连接oracle数据库,报错解决,pandas读取。
  18. 今日分享 不可思议的人体
  19. Viewstate verification failed 解决办法
  20. matlab三相短路电流计算程序_基于MATLAB的短路电流计算程序编制.pdf

热门文章

  1. navicat 查看mysql版本,查看oracle版本,查看sqlserver版本
  2. linux 清除端口占用
  3. Linux下CS程序开发,Linux_Linux玩CS反恐精英的方法,一、下载必要的软件包 我们 - phpStudy...
  4. c语言最长公共子序列,算法设计与分析/动态规划——最长公共子序列LCS及模板...
  5. Noobs Round #2 (Div. 4) by Rudro25 C. Team(双指针+贪心)
  6. liunx下的组管理
  7. html5三国策略布阵,《三国志战略版》五谋臣阵容搭配推荐 程昱贾诩郭嘉五谋阵容解析...
  8. java饭店里面有五道菜, 黄花鱼 200块, 烤鸭 100块, 红烧肉 60块, 小炒肉 40块, 白水豆腐 10块。一个客人进了饭店, 根据身上的钱来决定最好能吃哪道菜 , 编程模拟。
  9. 风控之乱:零经验者,跳槽3次,年薪50万 2016-10-20 20:06 来源:一本财经(yibencaijing) 本文经授权转载!感谢原作者的辛勤创作! 金融的核心是什么? 严谨的金融从业者,
  10. 电影记忆之19(搏击俱乐部)