Java:lambda表达式干了些什么?

代码,自然写的越简洁越好啦,写的人舒服,看的人也舒服,一切为了高效。

要把有限的时间花到其它有意思的事情上去。


 lamada表达式简化了匿名内部类


函数接口

  只有一个抽象方法的接口,通常使用@FunctionalInterface注解标识。

例如:

Lambda

格式:

  这等同于创建了一个匿名实现类对象。

()->{
  //方法体
};

例子

  匿名内部类创建线程

public class LeaningLamda{
    public static void main(String[] args) {
        
        //需要借助父类或者接口来声明
        new Thread(new Runnable(){
            @Override
            public void run() {
                System.out.println(this.getClass()+"我已经在跑了!");
            }
        }).start();
    }
}

  使用lamda表达式实现

public class LeaningLamda{
    public static void main(String[] args) {
        new Thread(()-> {
                System.out.println("我已经在跑了!");
            }
        ).start();
    }
}

详细说明

参数

  lamda表达式中的参数可以不指定类型,它会自适应。

public class LeaningLamda2 {
    public static void main(String[] args) {

        MyInterface ls = (i,str)->{
            System.out.println("int:"+i);
            System.out.println("String:"+str);};

        ls.sayHi(520,"i love you!");
    }
}
interface MyInterface{
    void sayHi(int i,String str);
}

运行结果:

  只有一个参数时,括号可以省略

public class LeaningLamda2 {
    public static void main(String[] args) {

        MyInterface ls = str-> {System.out.println("String:"+str);};
        ls.sayHi("i love you!");
    }
}
interface MyInterface{
    void sayHi(String str);
}

运行结果:

返回值

  如果有返回值,正常返回

public class LeaningLamda2 {
    public static void main(String[] args) {

        MyInterface ls = (String str)-> {
            String str2 = "最后的赢家是:"+str;
            return str2;};
        System.out.println(ls.sayHi("lurenjia"));
    }
}
interface MyInterface{
    String sayHi(String str);
}

  如果方法体只有一条语句,大括号可以省略

public class LeaningLamda2 {
    public static void main(String[] args) {

        MyInterface ls = (int i,String str)-> System.out.println("int:"+i+"----String:"+str);
        ls.sayHi(520,"i love you!");
    }
}
interface MyInterface{
    void sayHi(int i,String str);
}

  如果方法体只有一条返回语句,return 可以省略

public class LeaningLamda2 {
    public static void main(String[] args) {

        MyInterface ls = str-> "最后的赢家是:"+str;
        System.out.println(ls.sayHi("中国"));
    }
}
interface MyInterface{
    String sayHi(String str);
}

运行结果:


总结

1、接口为函数接口。

2、需要创建匿名内部类。

3、基本形式为:

接口或父类   名称  = (参数类型1 参数1,参数类型2 参数2,...)->{
            内容
        };
名称.方法(参数1,参数2,...);

4、可以省略的是:

1、参数类型可省,若只有一位,则括号可省。

2、方法内容只有一条内容,大括号可省。

3、内容只有一句return语句,return可省,直接写值。
posted @ 2022-11-10 12:37  在博客做笔记的路人甲  阅读(866)  评论(0编辑  收藏  举报