一篇文章,让你对Lamdba表达式感到不在困难

Posted 韶光不负

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一篇文章,让你对Lamdba表达式感到不在困难相关的知识,希望对你有一定的参考价值。

小编发现在leetcode(力扣)上,许多大佬的解题方法中有大量使用lamdaa表达式,让小编向往,但代码阅读对小编这样的小白不太友好,所以小编决定学习lamdba表达式,让自己更加了解和使用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();
    


 结论:()->代替内部类中的方法, 方法体 来书写方法体。

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是在哗众取宠

第二十一节——Lamdba表达式与函数式接口

Java8 Lamdba表达式 003

你对Redis持久化了解多少?一篇文章让你明白Redis持久化

Lamdba表达式----针对数据库操作

一篇文章让你精通:java集合讲解(练习处理)