匿名函数: 学习Java中匿名函数的定义和使用方法
匿名函数在Java中也称为Lambda表达式,是Java 8新增的一个特性。它可以让我们更加快捷、简洁地定义和使用函数,避免了定义大量无用的接口和类。本文将介绍Java中匿名函数的定义和使用方法。
一、定义方式
Lambda表达式的定义形式为(参数列表) -> {函数体},可以理解为把一个函数直接定义在了代码块里。
(1) 无参无返回值
() -> { System.out.println("Hello, World!"); }
(2) 有参有返回值
(x, y) -> { return x + y; }
(3) 单个参数可以省略参数类型
x -> { return x * x; }
(4) 单行代码可以省略大括号和return关键字(必须同时省略)
(x, y) -> x + y
二、使用方式
使用Lambda表达式需要结合函数式接口(Functional Interface)来使用,函数式接口是指只有一个抽象方法的接口。如下所示:
@FunctionalInterface
interface MyInterface {
void doSomething();
}
Lambda表达式的使用方式与普通的函数一样,可以将它赋值给接口变量或传入方法中作为参数。
(1) 将Lambda赋值给接口变量
MyInterface myInterface = () -> System.out.println("Hello, Lambda!");
myInterface.doSomething(); // 输出:Hello, Lambda!
(2) 将Lambda传入方法中作为参数
public static void doSomething(MyInterface myInterface) {
myInterface.doSomething();
}
doSomething(() -> System.out.println("Hello, Lambda!")); // 输出:Hello, Lambda!
三、常用方法
(1) forEach
List<String> list = Arrays.asList("Java", "Python", "C++");
list.forEach(s -> System.out.println(s));
(2) filter
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
List<Integer> filtered = numbers.stream().filter(n -> n % 2 == 0).collect(Collectors.toList());
(3) map
List<String> list = Arrays.asList("Java", "Python", "C++");
List<Integer> lengths = list.stream().map(s -> s.length()).collect(Collectors.toList());
(4) reduce
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
int sum = numbers.stream().reduce(0, (a, b) -> a + b);
(5) sort
List<Integer> unsorted = Arrays.asList(3, 2, 1, 5, 4);
List<Integer> sorted = unsorted.stream().sorted((a, b) -> a - b).collect(Collectors.toList());
总结
Lambda表达式是Java中函数式编程的一种形式,它简化了代码的书写和理解,提高了代码的可读性和可维护性。匿名函数的学习需要掌握其定义和使用方式,掌握它常见的方法也能够有效提升代码的开发效率。
