Java中如何创建和使用匿名函数?
在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表达式只能用于函数式接口,也就是只能用于只有一个抽象方法的接口。
