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

Java中如何创建和使用匿名函数?

发布时间:2023-05-23 08:26:31

在Java中,匿名函数也称为Lambda表达式。Lambda表达式是Java 8引入的一种新特性,它提供了一种简洁、直观的编码方式,能够快速地创建函数,并以参数的形式传递。在Java中,使用Lambda表达式可以实现函数式编程的思想,使代码更加简洁、易于维护。

一、创建Lambda表达式

Lambda表达式由三个主要部分组成:参数列表、箭头符号和函数体。在创建Lambda表达式时需要根据需要指定这三个部分。

1、参数列表:Lambda表达式可以有零个或多个参数,当有一个参数时可以省略括号。如果没有参数,则需要保留空括号。

例如:

() -> System.out.println("Hello World");//没有参数

(s) -> System.out.println(s);//一个参数

(x, y) -> System.out.println(x + y);//多个参数

2、箭头符号:箭头符号“->”表示将参数传递到函数体中。箭头符号前面的参数列表,箭头符号后面的代码块都可以省略。

例如:

() -> System.out.println("Hello World");//Lambda表达式的完整形式

() -> "Hello World";//省略箭头后面的代码块

x -> x * x;//只有一个参数,可以省略括号

3、函数体:Lambda表达式的函数体可以是代码块,也可以是表达式。

例如:

() -> System.out.println("Hello World");//Lambda表达式的完整形式

(s) -> { System.out.println("Hello "); System.out.println(s); };//Lambda表达式的函数体是代码块

(x, y) -> x + y;//Lambda表达式的函数体是表达式

二、使用Lambda表达式

在Java中,可以将Lambda表达式作为方法参数传递,或者将其作为变量赋值。

1、将Lambda表达式作为方法参数传递

例如:

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

public class LambdaTest {

    public static void main(String[] args) {

        List<String> words = new ArrayList<>(Arrays.asList("hello", "world", "java", "program"));

        // 使用Lambda表达式过滤word中长度大于4的字符串

        List<String> result = filter(words, s -> s.length() > 4);

        System.out.println(result);

    }

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

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

        for(String s : words) {

            if(p.test(s)) {

                result.add(s);

            }

        }

        return result;

    }

}

2、将Lambda表达式作为变量赋值

例如:

import java.util.function.Supplier;

public class LambdaTest {

    public static void main(String[] args) {

        // Lambda表达式作为变量

        Supplier<Double> random = () -> Math.random();

        System.out.println(random.get());

    }

}

总之,Java中的Lambda表达式是一种便利的编程方式,可以用来简化代码。使用Lambda表达式,可以使代码更加简洁、简单和易于维护。尤其是在多线程编程和集合处理中,Lambda表达式能够更好的发挥其优势。同时,需要注意,Lambda表达式只能用于函数式接口,也就是只能用于只有一个抽象方法的接口。