一篇文章,让你对Lamdba表达式感到不在困难
Posted 韶光不负
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一篇文章,让你对Lamdba表达式感到不在困难相关的知识,希望对你有一定的参考价值。
小编发现在leetcode(力扣)上,许多大佬的解题方法中有大量使用lamdaa表达式,让小编向往,但代码阅读对小编这样的小白不太友好,所以小编决定学习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();
结论:()->代替内部类中的方法, 方法体 来书写方法体。
lamdba表达式的使用
无参无返回值
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,当参数为多个时,参数外()不可以省略。
觉得还不错,记得关注小编哦,欢迎评论,点赞 收藏哦!
以上是关于一篇文章,让你对Lamdba表达式感到不在困难的主要内容,如果未能解决你的问题,请参考以下文章
超好用的excel操作技巧,不在让你感到你的excel是在哗众取宠