多线程之Lambda表达式
(一)、基础知识
- λ希腊字母表中排序11位,英文名称为Lambda
- 它的作用是避免匿名内部类定义过多
- 其实质是属于函数式编程的概念
- (params)->expression[表达式]
- (params)->statement[语句]
- (params)->statement
- new Thread(()->System.out.println(“多线程”)).start();
- 为什么要使用lambda表达式
避免匿名内部类定义过多
可以让代码看起来更加简洁
去掉了一对没有意义的代码。只留下核心的逻辑
- 理解Functional Interface(函数式接口)这个是关键
- 函数式接口的定义:
- 任何接口,如果只包含唯一一个抽象方法,那么他就是一个函数式接口。
public interface Runnable{ public abstract void run(); }
- 对于函数式接口,我们可以通过lambda表达式来创建该接口的对象。
package com.hxl.lambda; /* 推导Lambda表达式 */ public class TestLambda1 { //3.静态内部类 static class Like2 implements ILike{ @Override public void lambda() { System.out.println("I like lambda2"); } } public static void main(String[] args) { ILike like = new Like(); like.lambda(); like = new Like2(); like.lambda(); //4.局部内部类 class Like3 implements ILike{ @Override public void lambda() { System.out.println("I like lambda3"); } } like = new Like3(); like.lambda(); //5.匿名内部类,没有类的名称,必须借助接口或者父类 like = new Like(){ @Override public void lambda(){ System.out.println("I like lambda4"); } }; like.lambda(); //6.用lambda简化 like = ()->{ System.out.println("I like lambda6"); }; like.lambda(); } } //1.定义一个函数式接口 interface ILike{ void lambda(); } //2.实现类 class Like implements ILike{ @Override public void lambda() { System.out.println("I like lambda"); } }
/
package com.hxl.lambda; public class TestLambda2 { public static void main(String[] args) { //ILove love = null; //1.Lambda表达式简化 ILove love = (int a)->{ System.out.println("I Love You" + a); }; //简化1:参数类型 love = (a)->{ System.out.println("I Love You" + a); }; //简化2:简化括号 love = a->{ System.out.println("I Love You" + a); }; //简化3:去掉花括号 love = a->System.out.println("I Love You" + a); /* 小总结: 1.lambda表达式只能有一行代码的情况下才能简化为一行,如果代码里有多行,就用代码块包裹 2.前提是接口必须为函数式接口(接口里面只有一个方法) 3.多个参数可以去掉参数类型,要去就都去,且必须加上括号 */ love.love(32); } } interface ILove{ void love(int a); }