小编发现在leetcode(力扣)上,许多大佬的解题方法中有大量使用lamdaa表达式,让小编向往,但代码阅读对小编这样的小白不太友好,所以小编决定学习lamdba表达式,让自己更加了解和使用lamdba,小编也是小白,非常推荐与小白一起学习。
目录
Lamdba表达式
代替内部类中的方法,{ 方法体 } 来书写方法体。"> 结论:()->代替内部类中的方法,{ 方法体 } 来书写方法体。
lamdba表达式的使用
无参无返回值
结论:
观察下面代码分析有什么问题?
一个参数无返回值
结论:
多个参数无返回值
结论:
有参有返回值
结论:
JDK8.0后新功能,Lamdba是一个匿名函数。
作用:替代一些特殊的匿名内部类,让编程更加简洁(特殊的匿名内部类:匿名内部类实现的接口中只有一个抽象的类方法的内部类)
lamdba运算符:->
lamdba表达式语法:(有参数加参数)-> {表达式;} (当表达式只有一个时可以省略{})
public interface LamdbaTest { public void method(); } class MyClass implements LamdbaTest{ public void method(){ System.out.println("______method()______"); } public static void main(String[] args) { //1,定义实现类,创建对象并使用 LamdbaTest lamdbaTest = new MyClass(); lamdbaTest.method(); //2,匿名内部类 LamdbaTest lamdbaTest1 = new MyClass(){ @Override public void method() { System.out.println("这是个匿名内部类!"); } }; lamdbaTest1.method(); //lamdba表达式 // LamdbaTest lamdbaTest2 = ()->{ System.out.println("这是lamdba表达式!");}; //当只有一条语句时,让lamdba更加简洁 LamdbaTest lamdbaTest2 = ()-> System.out.println("这是lamdba表达式!"); lamdbaTest2.method(); } }
public interface LamdbaTest { // 无参无返回值 public void method(); } class MyClass implements LamdbaTest{ public void method(){ System.out.println("______method()______"); } public static void main(String[] args) { //lamdba表达式 // LamdbaTest lamdbaTest2 = ()->{ System.out.println("这是无参无返回的lamdba表达式!");}; //当只有一条语句时,让lamdba更加简洁 LamdbaTest lamdbaTest2 = ()-> System.out.println("这是无参无返回的lamdba表达式!"); lamdbaTest2.method(); //当多条条语句时,无参无返回 LamdbaTest lamdbaTest = ()-> {System.out.println("这是多条无参无返回的lamdba表达式!"); System.out.println("不要忘记添加{}与;号哦");}; lamdbaTest.method(); } }
1,当表达式只有一个是{}可以省略,多条表达式时{}不能省略,还要添加;。
2,lamdba表达式只能引用标记了final的外层局部变量,lamdba表达式的局部变量不要声明final,但变量不能被后面代码修改。
package com.luo_sf.map; public interface LamdbaTest { // 无参无返回值 public void method(); } class MyClass implements LamdbaTest{ public void method(){ System.out.println("______method()______"); } public static void main(String[] args) { int sum = 5;//隐藏了final //当多条条语句时,无参无返回 LamdbaTest lamdbaTest = ()-> {System.out.println("这是多条无参无返回的lamdba表达式!"); System.out.println("不要忘记添加{}与;号哦"); //sum++; System.out.println(sum);};//可以访问sum lamdbaTest.method(); } }
在lamdba表达式中可以访问所在局部变量,但不能进行修改,因为在lamdba表达式下变量是用隐藏final修饰的。
public interface LamdbaTest { // 一个参数参无返回值 public void method(int sum); } class MyClass implements LamdbaTest{ public void method(int sum){ System.out.println("______method()______"); } public static void main(String[] args) { //当一条语句时,一个参数无返回 LamdbaTest lamdbaTest = (int num)->{ System.out.println(num+100); }; lamdbaTest.method(100); //当多条语句时,一个参数无返回 LamdbaTest lamdbaTest1 = (n)-> {System.out.println("这是多条一个参无返回的lamdba表达式!"); System.out.println("不要忘记添加{}与;号哦"); //sum++; System.out.println(n+50);}; lamdbaTest1.method(100); //方法二 :当多条语句时,一个参数时()可以省略 LamdbaTest lamdbaTest2 = n-> {System.out.println("这是多条一个参无返回的lamdba表达式!"); System.out.println("不要忘记添加{}与;号哦"); //sum++; System.out.println(n+50);}; lamdbaTest1.method(100); } }
1,如果方法体只有一条语句,可以省略{},多条表达式时{}不能省略,还要添加;。
2,参数类可以省略,参数名称任意。
3,当参数为一个时,参数外()可以省略。
public interface LamdbaTest { // 多参数参无返回值 public void method(int sum , String name); } class MyClass implements LamdbaTest{ public void method(int sum , String name){ System.out.println("______method()______"); } public static void main(String[] args) { //当一条语句时,多个参数无返回 LamdbaTest lamdbaTest = (int num ,String name)->{ System.out.println(num+100+" 我是: "+name); }; lamdbaTest.method(100,"法外狂徒"); //当多条语句时,多个参数无返回 LamdbaTest lamdbaTest1 = (n,name)-> {System.out.println("这是多条一个参无返回的lamdba表达式!"); System.out.println("不要忘记添加{}与;号哦"); //sum++; System.out.println(n+50); System.out.println(name);}; lamdbaTest1.method(100 , "张三"); } }
1,如果方法体只有一条语句,可以省略{},多条表达式时{}不能省略,还要添加;。
2,参数类可以省略,参数名称任意(要省略一起省略!)。
3,当参数为多个时,参数外()不可以省略。
public interface LamdbaTest { // 有参有返回值 public int method(int sum); } class MyClass implements LamdbaTest{ public int method( int sum){ return 1; } public static void main(String[] args) { //lamdba表达式 //当只有一条语句时,让lamdba更加简洁 LamdbaTest lamdbaTest = (n) -> {return n+100;}; //返回值需要输出打印 System.out.println(lamdbaTest.method(100)); //当只有一条语句时,return可以省略 LamdbaTest lamdbaTest1 = n -> n+100; //返回值需要输出打印 System.out.println(lamdbaTest1.method(100)); //当多条条语句时,有参有返回 LamdbaTest lamdbaTest2 = (n)-> {System.out.println("这是多条有参有返回的lamdba表达式!"); System.out.println("不要忘记添加{}与;号哦"); return n+100;}; System.out.println( lamdbaTest2.method(100)); } }
1,如果方法体只有一条语句,可以省略{},还可以省略return,
2, 多条表达式时{}不能省略,还要添加;。
3,参数类可以省略,参数名称任意(要省略一起省略!)。
4,当参数为多个时,参数外()不可以省略。
觉得还不错,记得关注小编哦,欢迎评论,点赞 收藏哦!