一篇文章,让你对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表达式感到不在困难

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

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();

    }
}

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

 

结论:

        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表达式中可以访问所在局部变量,但不能进行修改,因为在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);
        

    }
}

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

 

结论:

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 , "张三");



    }
}

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

结论:

        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));
      

    }
}

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

结论: 

        1,如果方法体只有一条语句,可以省略{},还可以省略return,

        2,  多条表达式时{}不能省略,还要添加;。

        3,参数类可以省略,参数名称任意(要省略一起省略!)。

        4,当参数为多个时,参数外()不可以省略。

觉得还不错,记得关注小编哦,欢迎评论,点赞 收藏哦!

上一篇:hello你好


下一篇:Java的反射机制-动态调用对象的方法