• Java基础函数式编程


    本篇博文目录:

    1.什么是函数式接口

    只包含一个抽象方法的接口,称为函数式接口,也称为SAM接口,即Single Abstract Method interfaces,用@FunctionalInterface注解进行标注,常见的函数式接口如Comparator,Runnable,Callable。

    例子:

    1. @FunctionalInterface
    2. interface A {
    3. public void test(); // 只能包含一个抽象方法
    4. }

    并且还可以使用泛型,如下:

    1. @FunctionalInterface
    2. interface A<T> {
    3. public void test(T t); // 只能包含一个抽象方法
    4. }

    函数式接口不仅仅只定义一个抽象方法,还可以定义

    • 函数式接口里允许定义java.lang.Object里的public方法
    • 函数式接口里允许定义静态方法
    • 函数式接口里允许定义默认方法
    • 等等

    下面以 Comparator函数式接口为例:

    • 函数式接口里允许定义java.lang.Object里的public方法

    这里的 equals(Object obj)方法来自于java.lang.Object里的public方法boolean equals(Object obj);

    • 函数式接口里允许定义静态方法

    • 函数式接口里允许定义默认方法

    2.函数式编程

    函数式编程(Functional Programming)是把函数作为基本运算单元,函数可以作为变量,可以接收函数,还可以返回函数。历史上研究函数式编程的理论是Lambda演算,所以我们经常把支持函数式编程的编码风格称为Lambda表达式,Java从JDK1.8开始支持这种风格 ( 针对函数式接口的一种简单写法 )。

    (1) 使用Lambda表达式

    例子:

    1. @FunctionalInterface
    2. interface A {
    3. public void test(int a); // 只能包含一个抽象方法
    4. }
    5. class TestB {
    6. public static void Test(Integer num, A a) {
    7. a.test(num);
    8. }
    9. }
    • 使用匿名内部类(以前)
    1. // 使用匿名内部类
    2. TestB.Test(1, new A() {
    3. @Override
    4. public void test(int a) {
    5. System.out.println("【方式1】实现A接口的test方法,num="+a);
    6. }
    7. });
    • 使用Lambda表达式

    在以前对于这种 函数式接口参数 我们使用匿名匿名内部类的方式传递变量过去,从Java 8开始,我们可以用Lambda表达式进行简化。

    1. // 使用Lambda表达式
    2. TestB.Test(2,(int a)->
  • 相关阅读:
    mysql存储地理信息的方法
    关于canvas的缩放和位移实战的一点点总结
    Elasticsearch数据操作原理
    我认为除了HelloWorld之外,Python的三大数据转换实例可以作为开始学习Python的入门语言。
    基于Spring Boot开发的汽车租赁管理系统
    分库分表必会-跨库分页查询看此一篇就够了
    QT5 实现 SFTP 上传和下载文件
    仿制 Google Chrome 的恐龙小游戏
    vulnhub DC: 4
    国产bi VS国外bi,谁更适合中国企业?
  • 原文地址:https://blog.csdn.net/ch98000/article/details/126746983