Lambda表达式
-
“λ”是希腊字母的第11个,英文名叫lambda。
-
lambda可以用来简化线程,它是JDK8的新特性。
一、lambda是对线程的简化,那么我们先来看看,在没有lambda之前,要如何简化线程,进而一步步的推导出lambda表达式
1.直接实现类调用
package com.xxgc.lambda; //直接实现类调用 public class TestLambda2 { public static void main(String[] args) { ILove love = new Love(); love.Love(2); } } interface ILove{ void Love(int a); } //实现类 class Love implements ILove{ @Override public void Love(int a) { System.out.println("I love You-->" a); } }
2.静态内部类
package com.xxgc.lambda; //直接实现类调用 public class TestLambda2 { //静态内部类 static class Love implements ILove{ @Override public void Love(int a) { System.out.println("I love You-->" a); } } public static void main(String[] args) { ILove love = new Love(); love.Love(2); } } interface ILove{ void Love(int a); }
3.局部内部类
package com.xxgc.lambda; //直接实现类调用 public class TestLambda2 { public static void main(String[] args) { //局部内部类 class Love implements ILove{ @Override public void Love(int a) { System.out.println("I love You-->" a); } } ILove love = new Love(); love.Love(2); } } interface ILove{ void Love(int a); }
4.匿名内部类
package com.xxgc.lambda; //直接实现类调用 public class TestLambda2 { public static void main(String[] args) { //匿名内部类 ILove love = new ILove() { @Override public void Love(int a) { System.out.println("I love You-->" a); } }; love.Love(2); } } interface ILove{ void Love(int a); }
5.lambda表达式
package com.xxgc.lambda; //直接实现类调用 public class TestLambda2 { public static void main(String[] args) { //lambda表达式 ILove love = (int a) ->{ System.out.println("I love You-->" a); }; love.Love(520); } } interface ILove{ void Love(int a); }
6.再次简化lambda表达式,去掉参数类型
package com.xxgc.lambda; //直接实现类调用 public class TestLambda2 { public static void main(String[] args) { //lambda表达式 ILove love = (int a) ->{ System.out.println("I love You-->" a); }; //简化1:去掉参数类型 love = (a) -> { System.out.println("I love You-->" a); }; love.Love(520); } } interface ILove{ void Love(int a); }
7.再次简化,去掉括号
package com.xxgc.lambda; //直接实现类调用 public class TestLambda2 { public static void main(String[] args) { //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); }; love.Love(520); } } interface ILove{ void Love(int a); }
8.简化3:去掉花括号
package com.xxgc.lambda; //直接实现类调用 public class TestLambda2 { public static void main(String[] args) { // ILove love = null; //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); love.Love(521); } } interface ILove{ void Love(int a); }
总结:
-
lambda表达式只能有一行代码的情况下才能简化为一行,如果有多行,那么就用代码块包裹
-
前提还要是接口为函数式接口,即只有一个方法
-
多个参数也可以去掉参数类型,要去掉就都要去掉,必须加上括号。
package com.xxgc.lambda; //直接实现类调用 public class TestLambda2 { public static void main(String[] args) { // ILove love = null; //lambda表达式 ILove love = (int a,int b) ->{ System.out.println("I love You-->" a); }; //简化1:去掉参数类型 love = (a,b) -> { System.out.println("I love You-->" a); System.out.println("I love You-->too"); }; //简化2:去掉括号简化 //错误了 /* love = a,b -> { System.out.println("I love You-->" a); };*/ //简化3:去掉花括号 //love = (a,b) -> System.out.println("I love You-->" a); love.Love(521,502); } } interface ILove{ void Love(int a,int b); } //总结: //lambda表达式只能有一行代码的情况下才能简化为一行,如果有多行,那么就用代码块包裹 //前提还要是接口为函数式接口,即只有一个方法 //多个参数也可以去掉参数类型,要去掉就都要去掉,必须加上括号。
来源:https://www./content-4-737601.html
|