zgq105 / blog

2 stars 0 forks source link

Java8中Lambda表达式总结 #103

Open zgq105 opened 2 years ago

zgq105 commented 2 years ago

1.Lambda表达式是什么?解决什么问题?怎么使用?

Lambda是简化匿名内部类的开发模式,是一种基于函数式接口实现的一种编程模式。主要的作用是简化代码,使得代码的简洁性和可读性更好。

匿名内部类写法:

new Thread(new Runnable() {
            @Override
            public void run() {
                 System.out.println("HELLO");
            }
        }).start();

Lambda表达式写法:

new Thread(() -> {
            System.out.println("HELLO");
        }).start();

查看Runnable源码,如下:

@FunctionalInterface
public interface Runnable {
     public abstract void run();
}

在Runnable接口类中,只有一个抽象方法run(),同时Runnable被@FunctionalInterface注解修饰,表示这个类是一个函数式接口,可以使用Lambda功能特性。(说明:@FunctionalInterface不是必须的,加上它编译器能检查接口是否符合函数式接口)

看一下下面这段代码,会正常吗?:

@FunctionalInterface
public interface Work {

    void doWork(String str);

    void work2();
}

上面这段代码编译器会报错:Multiple non-overriding abstract methods found in interface com.guoqiang.Work,原因是@FunctionalInterface修饰的函数式接口只能有一个抽象方法。

看看下面这段代码:

@FunctionalInterface
public interface Work {

    void doWork(String str); //抽象方法

    default void work2(){  //非抽象方法,有方法的实现

    }
}

因此,上面这段代码只有一个抽象方法是正常的,符合函数式接口的规范,可以使用Lambda表达式,如下:

public class WorkTest {
    public WorkTest(Work work){
        work.doWork("ZGQ");
        work.work2();
    }
}

new WorkTest(str -> {
            System.out.println("HELLO:"+str);   //输出:HELLO:ZGQ
        });

2.Lambda的原理剖析

3.Lambda在List中应用

4.Lambda在Map中应用

5.Stream API函数式编程