JDK新特性-Lambda表达式的神操作

一、Lambda表达式的介绍

Lambda表达式是 Java8 中最重要的新功能之一。使用 Lambda 表达
式可以替代只有一个抽象函数的接口实现,告别匿名内部类,代码看
起来更简洁易懂。Lambda表达式同时还提升了对集合、框架的迭代、
遍历、过滤数据的操作。

lambda表达式可以替代只有一个抽象函数的接口实现,告别匿名内部类,代码看起来更简洁易懂

lambda表达式同时还提升了对集合、框架的迭代、遍历、过滤数据的操作

lambda可以极大的减少代码冗余,同时代码的可读性要好过冗长的内部类,匿名类

例如以前我们使用匿名内部类来实现代码:

Runnable runnable = new Runnable() { @Override public void run() { System.out.println("running1 ....."); } }; runnable.run();

使用lambda表达式实现更简洁的代码:

Runnable runnable3 = ()-> System.out.println("running2...."); runnable3.run();

lambda表达式语法:

LambdaParameters -> LambdaBody

在这里插入图片描述


args -> expr或者(object ... args)-> {函数式接口抽象方法实现逻辑}

​ 1、()参数的个数,根据函数式接口里面抽象的参数个数来决定,当参数只有一个的时候,()可以省略

​ 2、当expr逻辑非常简单的时候,{}和return可以省略

案例说明:

public static void main(String[] args) throws Exception { Callable<String> c1 = new Callable() { @Override public String call() throws Exception { return "muxiaonong"; } }; System.out.println(c1.call()); Callable<String> c2 = ()->{return "muxiaonong2";}; System.out.println(c2.call()); //逻辑很简单的时候省略 {} 和 return Callable<String> c3 = ()->"muxiaonong3"; System.out.println(c3.call()); } 二、Lambda表达式的特点

函数式编程

参数类型自动推断

代码量少,简洁

三、Lambda表达式案例

实现方式列表:

​ ()->{} ​ ()->{System.out.println(1);} ​ ()->System.out.println(1) ​ ()->{return 100;} ​ ()->100 ​ ()->null ​ (int x)->{return x+1;} ​ (int x)->x+1 ​ (x)->x+1 ​ x->x+1

案例1:线程实现方式:

public static void main(String[] args) { //匿名内部类方式 new Thread(new Runnable() { @Override public void run() { System.out.println("runing1.........."); } }); //Lambda表达式方式 new Thread(() -> {System.out.println("runing2.....");}).start(); }

案例2:集合遍历实现方式

public static void main(String[] args) { List<String> list = Arrays.asList("java","python","scala","javascript"); //普通匿名内部类方式 Collections.sort(list, new Comparator<String>() { @Override public int compare(String o1, String o2) { return o1.length() - o2.length(); } }); //Lambda方式 Collections.sort(list,(a,b) -> a.length() - b.length()); list.forEach(System.out::println); } 四、Lambda表达式的应用场景

重要的事情说三遍:任何有函数式接口的地方 * 3

什么是函数式接口: 只有一个抽象方法(Object类中的方法除外)的接口是函数式接口

五、Lambda表达式实际应用 5.1 无参实体类模拟

模拟数据库连接层:

@FunctionalInterface public interface StudentDao { void insert(Student student); }

实体类

/** @Author mxn * @Description 学生实体类 * @Date 10:19 2020/11/7 * @Param * @return **/ public class Student { } public static void main(String[] args) { StudentDao sd1 = new StudentDao() { @Override public void insert(Student student) { System.out.println("插入学生1"); } }; StudentDao sd2 = (student)->{ System.out.println("student: "+student); }; StudentDao sd3 = (Student student)-> System.out.println("student3:"+student); sd1.insert(new Student()); //输出 插入学生1 sd2.insert(new Student());// 输出 sd3.insert(new Student());// 输出 } 5.2 有参实体类模拟

实体类

/** @Author mxn * @Description * @Date 10:26 2020/11/7 * @Param * @return **/ public class Teacher { }

接口模拟层

@FunctionalInterface public interface TeacherDao { int get(Teacher teacher); }

实现层

public static void main(String[] args) { TeacherDao td1 = new TeacherDao() { @Override public int get(Teacher teacher) { return 1; } }; TeacherDao td2 = (teacher)->{return 2;}; TeacherDao td3 = (Teacher teacher)->{return 3;}; TeacherDao td4 = (teacher)->4; TeacherDao td5 = (Teacher teacher)->5; System.out.println(td1.get(new Teacher()));//输出 1 System.out.println(td2.get(new Teacher()));//输出 2 System.out.println(td3.get(new Teacher()));//输出 3 System.out.println(td4.get(new Teacher()));//输出 4 System.out.println(td5.get(new Teacher()));//输出 5 } 六、函数式接口

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsfxzd.html