将一个函数(也称“行为”)作为一个参数进行传递
面向对象编程是对数据的抽象(各种各样的POJO类),而函数式编程则是对行为的抽象 (将行为作为一个参数进行传递)
支持版本:JDK 8 及以上
jdk8之前
- new Thread(new Runnable() {
- @Override
- public void run() {
- System.out.println("【创建线程】jdk8之前");
- }
- }).start();
jdk8之后 Lambda表达式
new Thread(()-> System.out.println("【创建线程】jdk8之后 Lambda表达式")).start();
jdk8之前
- List
list = Arrays.asList("aaa", "bbb", "ccc", "ddd"); - Collections.sort(list, new Comparator
() { - @Override
- public int compare(String o1, String o2) {
- return o1.compareTo(o2);
- }
- });
-
- System.out.println("jdk8之前写法:升序》");
- for (String s : list) {
- System.out.println( s);
- }
jdk8之后 Lambda表达式
- Collections.sort(list, (a, b) -> b.compareTo(a));
- System.out.println("jdk8之后lambda写法:降序》");
- for (String s : list) {
- System.out.println(s);
- }
一个接口中只包含一个方法,则可以使用Lambda表达式
这样的接口称之为"函数接口"
第一部分为括号内用 逗号分隔的形式参数,参数是函数式接口里面方法的参数
第二部分为一个箭头符号:->;
第三部分为 方法体,可以是表达式和代码块
括号中参数列表的数据类型可以省略不写
括号中的参数只有一个,那么参数类型和()都可以省略不写
如果{}中的代码只有一行,无论有返回值,可以省略 {},return,分号
{},return,分号 要一起省略
-
- //两种写法等效
- Collections.sort(list, (a, b) -> b.compareTo(a));
- Collections.sort(list, (a, b) -> {
- return b.compareTo(a);
- });
Lambda 表达式的实现方式在本质是以匿名内部类的方式进行实现
重构现有髓肿代码,更高的开发效率,尤其是集合Collection操作