编程语言
首页 > 编程语言> > [JAVA] 10.JAVA中的Lambda

[JAVA] 10.JAVA中的Lambda

作者:互联网

一个接口实现的简单例子:

Printer.java

public interface Printer {
    void print(String message);
}

ConsolePrinter.java

public class ConsolePrinter implements Printer {
    @Override
    public void print(String message) {
        System.out.println(message);
    }
}

LambdaDemo.java

public class LambdaDemo {
    public static void show(){
        //通过实例化实现了接口的类
        greet(new ConsolePrinter());
    }
    public static void greet(Printer printer){
        printer.print("你好,master。");
    }
}

匿名内部类

为了快捷调用greet方法,可以使用匿名内部类来实现这个接口

public static void show(){
        //通过内部匿名类实现了接口的类
        greet(new Printer() {
            @Override
            public void print(String message) {
                
            }
        });
    }

由于这里只有一个需要实现的函数,所以可以使用lambda函数进行替换

public static void show(){
        //通过Lambda函数实现了接口的类
        greet(message -> {
            System.out.println(message);
        });
    }

在这个lambda表达式中,只调用了一个方法,所以可以使用方法引用来简化写法:

public static void show(){
        //通过引用方法实现了接口的类
        greet(System.out::println);
    }

函数式接口

这里提到了两种编程模式:imperative program命令式编程,declarative program声明式编程。

public static void main(String[] args) {
        List<Integer> list = List.of(1, 2, 3);
        //命令式编程
        for (var item:list)
            System.out.println(item);

        //声明式编程
        list.forEach(System.out::println);
    }

链式消费者

得益于andThen方法,可以传入消费者,并返回消费者,可以支持链式调用。

Customer.andThen(Customer)

四种函数式接口

四种函数式接口

详见个人总结的Xmind

标签:10,JAVA,void,greet,static,接口,message,public,Lambda
来源: https://www.cnblogs.com/modai/p/12795388.html