函数编程语法
一、表现形式
在 Java 语言中,lambda 对象有两种形式:lambda 表达式与方法引用
lambda 对象的类型是由它的行为决定的,如果有一些 lambda 对象,它们的入参类型、返回值类型都一致,那么它们可以看作是同一类的 lambda 对象,它们的类型,用函数式接口来表示
二、函数类型
练习:将 lambda 对象分类,见 PPT
函数接口的命名规律
- 带有 Unary 是一元的意思,表示一个参数
- 带有 Bi 或 Binary 是二元的意思,表示两个参数
- Ternary 三元
- Quatenary 四元
- ...
方法引用也是类似,入参类型、返回值类型都一致的话,可以看作同一类的对象,也是用函数式接口表示
三、六种方法引用
1)类名::静态方法名
如何理解:
- 函数对象的逻辑部分是:调用此静态方法
- 因此这个静态方法需要什么参数,函数对象也提供相应的参数即可
public class Type2Test {
public static void main(String[] args) {
/*
需求:挑选出所有男性学生
*/
Stream.of(
new Student("张无忌", "男"),
new Student("周芷若", "女"),
new Student("宋青书", "男")
)
.filter(Type2Test::isMale)
.forEach(student -> System.out.println(student));
}
static boolean isMale(Student student) {
return student.sex.equals("男");
}
record Student(String name, String sex) {
}
}
- filter 这个高阶函数接收的函数类型(Predicate)是:一个 T 类型的入参,一个 boolean 的返回值
- 因此我们只需要给它提供一个相符合的 lambda 对象即可
- isMale 这个静态方法有入参 Student 对应 T,有返回值 boolean 也能对应上,所以可以直接使用
输出
Student[name=张无忌, sex=男]
Student[name=宋青书, sex=男]
2)类名::非静态方法名
如何理解:
- 函数对象的逻辑部分是:调用此非静态方法
- 因此这个函数对象需要提供一个额外的对象参数,以便能够调用此非静态方法
- 非静态方法的剩余参数,与函数对象的剩余参数一一对应
例1:
public class Type3Test {
public static void main(String[] args) {
highOrder(Student::hello);
}
static void highOrder(Type3 lambda) {
System.out.println(lambda.transfer(new Student("张三"), "你好"));
}
interface Type3 {
String transfer(Student stu, String message);
}
static class Student {
String name;
public Student(String name) {
this.name = name;
}
public String hello(String message) {
return this.name + " say: " + message;
}
}
}
上例中函数类型的
- 参数1 对应着 hello 方法所属类型 Student
- 参数2 对应着 hello 方法自己的参数 String
- 返回值对应着 hello 方法自己的返回值 String
输出
张三 say: 你好
例2:改写之前根据性别过滤的需求
public class Type2Test {
public static void main(String[] args) {
/*
需求:挑选出所有男性学生
*/
Stream.of(
new Student("张无忌", "男"),
new Student("周芷若", "女"),
new Student("宋青书", "男")
)
.filter(Student::isMale)
.forEach(student -> System.out.println(student));
}
record Student(String name, String sex) {
boolean isMale() {
return this.sex.equals("男");
}
}
}
- filter 这个高阶函数接收的函数类型(Predicate)是

最低0.47元/天 解锁文章
648

被折叠的 条评论
为什么被折叠?



