函数式编程

函数编程

什么是函数,函数就是一种规则,当我们输入x后,根据规则输出返回f(x)计算的结果给我们,f(x) 就是函数

合格的函数

✅一个合格的函数

我们的规则需要不可变,也就是 函数内部的逻辑不可以依赖可变的外部数据

函数对象

函数对象的语法格式

如下:

1
2
//参数 -> 逻辑部分
student -> student.sex.equal("男")

这就是一个函数对象,(解析:返回student的性别是否是男性的boolean值)

🔴 函数对象接口定义写法 如下:(也就是函数式接口,可以使用lambda匿名函数

🔵 如果希望该接口更通用、可扩展 即可使用 泛型T 来做函数方法的返回值

1
2
3
interface [函数对象名称] {
[一个函数方法]
}

记得lambda表达式要看成是一个函数对象

例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//  ****  函数式接口的定义 ---加上泛型更具扩展性 ******//

@FunctionalInterface
interface Type2{
Object get();
}
/**
* 接受任意类型实现与返回
* @param <T>
*/
@FunctionalInterface
interface Type1<T>{
T get();
}
/**
* 接受任意类型实现与返回,接受任意参数
* @param <T>
*/
@FunctionalInterface
interface Type3<O,I>{
O get(I i);
}

函数对象的好处​ :happy:

行为参数化

我们可以以此写出一些通用性的方法,

应用场景:一些重复代码比较多的函数,

比如遍历一个数组students(里面有一些student对象),需要根据student性别或者年龄或者其他参数来筛选

🌵 我们就可以使用行为参数化来实现不同的筛选条件,而不必每种不同的筛选条件都写一个新方法。

在函数参数多加一个函数对象 (下面的 Lambda 是已经定义好的函数接口) ,在逻辑部分使用函数调用函数对象内的方法

例如:

通用性函数

🔴 调用方式

调用方式

方法引用

如图,是lambda表达式的简写版本

👍 tips: 只要注意方法引用的方法需要什么参数才能执行,即可推断出lambda写法

方法引用与lambda等价写法

JDK 中的函数式接口

其实jdk中已经定义好了一些函数式接口方便我们使用,满足我们大部分的需求了,所以我们基本不需要自定义了,直接调用就行

🔴这是jdk中我们常用的函数式接口 ,lambda写法对应参数与返回值如下

常见函数式接口特点

附上梳理图

梳理

方法引用类型和Stream流:

  1. 类名: : 静态方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Stream.of(
    new Student("张三",18),
    new Student("李四",20)
    ) //打印
    // .forEach((stu)->System.out.println(stu) ) #lambda写法
    .forEach(Method01::printStudent) //静态方法引用 写法
    ....

    public class Method01{
    public static void printStudent(Student stu){
    System.out.println(stu)
    }
    }
  2. 类名: : 非静态方法

    1
    2
    3
    //参数-->逻辑
    Student::getName ->stu.getName()

Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2023-2025 IceBlin
  • Visitors: | Views:

thanks,but no~~

支付宝
微信
//引入