欢迎访问宙启技术站
智能推送

Java中lambda表达式的使用和函数式接口

发布时间:2023-06-10 13:15:27

Java从8版本开始引入了lambda表达式和函数式接口的概念,这为Java编程带来了很多优点。Lambda表达式可以让Java程序实现更加简洁、高效的编写方式。

一、 Lambda表达式

1.1 Lambda表达式和匿名内部类

最初在Java中,如果想要创建匿名内部类,我们需要使用以下方式:

new ActionListener() {  
    public void actionPerformed(ActionEvent e) {  
       System.out.println("Button clicked");  
    }  
}

这样做有些繁琐,需要编写很多代码,使得代码臃肿不堪。Lambda表达式可以使得匿名内部类的编写变得简单明了,使得代码更加简洁:

event -> System.out.println("Button clicked");

这里的"event"是参数名,"->"是Lambda表达式的语法,"System.out.println("Button clicked")"是Lambda表达式的代码段。

1.2 Lambda表达式的语法

Lambda表达式的基本语法如下:

(parameters) -> expression

或者:

(parameters) -> {statements;}

箭头"->"将Lambda表达式分为两个部分。箭头左边是参数列表(可以省略),箭头右边是Lambda表达式执行的代码段(可以是表达式,也可以是代码块)。

例如,以下Lambda表达式接收一个整数参数并返回平方值:

x -> x * x

更复杂的Lambda表达式可能需要使用代码块以获得更大的控制权。在这种情况下,需要使用花括号"{}"添加更多的代码,如下所示:

x -> {
    System.out.println("Starting square calculation");
    int result = x * x;
    System.out.println("End of square calculation");
    return result;
}

这样的Lambda表达式包含多个语句,因此需要使用代码块。

二、函数式接口

Lambda表达式的真正价值在于函数式接口。函数式接口是一个只有一个抽象方法的接口,它允许Lambda表达式用作该接口的实例。这意味着可以使用Lambda表达式以更简洁的方式编写接口的实现,而无需编写冗长的匿名内部类。

Java中内置了一些函数式接口,例如:

1) Consumer<T>:接收一个参数,不返回任何结果。

2) Function<T, R>:接收一个参数并返回一个结果。

3) Predicate<T>:接收一个参数并返回一个布尔值。

4) Supplier<T>:不接受参数,返回一个结果。

例如,以下是Consumer接口的示例:

Consumer<String> printer =
    str -> System.out.println(str);
printer.accept("Hello World");

这里,Lambda表达式作为Consumer接口的实例,接受一个字符串参数并将其打印到控制台上。

Java 8还提供了许多其他预定义的函数式接口,例如BiFunction、UnaryOperator和BinaryOperator等等。

三、总结

Lambda表达式和函数式接口是Java 8中非常有用和重要的功能。它们可以让我们以更简洁、高效的方式编写Java程序,并且可以帮助我们更好地利用现代硬件并发功能。但是需要注意,Lambda表达式和函数式接口仅适用于Java 8及更高版本,而在低版本中不可用。同时,需要掌握Lambda表达式的语法和函数式接口的使用方式,以免出现编码问题。