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

Java中lambda表达式和函数式接口

发布时间:2023-06-17 17:00:26

Java中的Lambda表达式和函数式接口是Java8中的新特性,它们支持函数式编程和简洁的编程风格。Lambda表达式是一种匿名函数,可以作为参数传递给其他方法,也可以返回另一个方法。函数式接口是一种只有一个抽象方法的接口,它可以与Lambda表达式一起使用。

Lambda表达式

Lambda表达式是一种匿名函数,它可以作为参数传递给其他方法,也可以返回另一个方法。Lambda表达式可以用于任何接口中定义的单个方法,这种接口称为函数式接口。Lambda表达式的语法如下:

(parameter1, parameter2, ..., parameterN) -> {expression}

或者

(parameter1, parameter2, ..., parameterN) -> {statements;}

其中,参数列表用括号括起来,参数之间用逗号分隔。箭头(->)表示Lambda表达式的左边是参数列表,右边是表达式或语句块(由花括号括起来)。表达式可以是任何Java表达式,语句块可以是任何Java语句序列。

例如,以下是一个使用Lambda表达式的示例:

List<String> names = Arrays.asList("Alice", "Bob", "Charlie");

names.stream()

     .filter(n -> n.length() > 4)

     .forEach(System.out::println);

在上面的代码中,Lambda表达式n -> n.length() > 4是用作Predicate接口的test方法的实现。这个Lambda表达式检查名字的长度是否超过4个字符。

函数式接口

函数式接口是只定义了一个抽象方法的接口,它可以与Lambda表达式一起使用。Java 8提供了一些内置的函数式接口,如Predicate、Consumer、Supplier和Function。函数式接口可以使用@FunctionalInterface注解来提示编译器检查接口是否是函数式接口。

例如,以下是一个使用Predicate接口的示例:

public static void main(String[] args) {

    List<String> names = Arrays.asList("Alice", "Bob", "Charlie");

    List<String> longNames = filter(names, n -> n.length() > 4);

    System.out.println(longNames);

}

public static List<String> filter(List<String> list, Predicate<String> p) {

    List<String> result = new ArrayList<>();

    for (String s : list) {

        if (p.test(s)) {

            result.add(s);

        }

    }

    return result;

}

在上面的代码中,Predicate接口用于检查名字的长度是否大于4,filter方法接受一个Predicate接口的实现作为参数,并返回名字长度大于4的名字的列表。

总结

Lambda表达式和函数式接口是Java8中的新特性,它们支持函数式编程和简洁的编程风格。Lambda表达式是一种匿名函数,可以作为参数传递给其他方法,也可以返回另一个方法。函数式接口是一种只有一个抽象方法的接口,它可以与Lambda表达式一起使用。使用Lambda表达式和函数式接口可以写出简洁、直观和易于理解的代码。