函数式编程

1. Lambda表达式

(被重写方法的形参列表) ->{
	被重写方法的方法体代码。
}
  • 可以用于替代某些匿名内部类对象,从而让程序更简洁,可读性更好。
  • Lambda表达式只能替代函数式接口(有且仅有一个抽象方法的接口)的匿名内部类。

函数式接口:
只有一个抽象方法的接口就是函数式接口。
在接口上加上@Funcationallnterface注解即可。

Lambda表达式

  • 因为能从上下文推断出真正的代码所以能简化。

Lambda表达式的省略规则:

  • 参数类型全部可以省略不写。
  • 如果只有一个参数,参数类型省略的同时()也可以省略,但多个参数不能省略()
  • 如果Lambda表达式中只有一行代码,大括号可以不写,同时要省略分号;如果这行代码是return语句,也必须去掉return

Lambda简化

2. 方法引用

2.1 静态方法引用

  • 使用场景:如果某个Lambda表达式里只是调用一个静态方法,并且“→”前后参数的形式一致,就可以使用静态方法引用。
  • 使用:类名::静态方法

静态方法:

静态方法

参数形式一致:

静态方法引用

2.2 实例方法引用

  • 使用场景:如果某个Lambda表达式里只是通过对象名称调用一个实例方法,并且 前后参数的形式一致,就可以使用实例方法引用。
  • 使用:对象名::实例方法

实例方法:

实例方法

调用实例方法:

实例方法引用

2.3 特定类的方法引用

  • 使用场景:如果某个Lambda表达式里只是调用一个特定类型的实例方法,并且前面参数列表中的第一个参数是作为方法的主调,后面的所有参数都是作为该实例方法的入参的,则此时就可以使用特定类型的方法引用。
  • 使用:特定类的名称::方法

拿o1的字符串对象调用字符串的实例方法compareToIgnoreCase:

特定类型方法引用

2.4 构造器引用

  • 使用场景:如果某个Lambda表达式里只是在创建对象,并且前后参数情况一致,就可以使用构造器引用。
  • 使用:类名::new

创建类和接口:

类和接口

创建接口的匿名内部类:

构造器引用

更多推荐