JAVA多线程——lambda表达式
lambda表达式其实质属于函数式编程
lambda表达式的作用
-
避免匿名内部类定义过多
-
去掉了一堆没有意义的代码,只留下核心的逻辑,让代码简洁
用lambda表达式和用内部类的区别
package com.peng.lambda; public class TestLambda1 { //静态内部类Like2 用静态内部类的方法操作 static class Like2 implements ILike { @Override public void lambda() { System.out.println("You Like lambda"); } } public static void main(String[] args) { ILike like = new Like(); like.lambda(); like = new Like2(); like.lambda(); //局部内部类 用局部内部类的方法操作 class Like3 implements ILike { @Override public void lambda() { System.out.println("He Like lambda"); } } like = new Like3(); like.lambda(); //匿名内部类 借助接口或父类 用匿名内部类的方法操作 like= new ILike() { @Override public void lambda() { System.out.println("She Like lambda"); } }; like.lambda(); //用lambda简化 用lambda表达式的方法操作 //因为只有ILike这一个接口,然后ILike接口只有一个类,类里面也只有lambda一个方法,表达式会自动推导 like = ()-> { System.out.println("Her Like lambda"); }; like.lambda(); } } //定义一个函数式接口 函数式接口:只包含唯一一个抽象方法的接口 //对于函数式接口,可以通过lambda表达式来创建该接口的对象 interface ILike { void lambda();//抽象方法 public abstracrt可以省略 } //实现类Like,实现函数接口 用实现类的方法操作 class Like implements ILike { @Override public void lambda() { System.out.println("I Like lambda"); } }
lambda表达式只能一行代码的情况下才能化简成为一行,如果有多行,就用代码块包裹。
用lambda表达式的前提是接口为函数接口
多个参数也可以去掉参数类型,要加上括号
package com.peng.lambda;
public class TestLambda2 {
public static void main(String[] args) {
//ILove love =(int a)->{
//System.out.println("i love you" +a + "次");
// };
//简化 去掉参数返回值类型和括号和花括号(如果有多行代码就不能简化花括号)
ILove love = a-> System.out.println("i love you" + a +"次");
love.love(3000);
}
}
interface ILove {
void love(int a);
}