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

匿名函数: 学习Java中匿名函数的定义和使用方法

发布时间:2023-06-24 23:47:08

匿名函数在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中函数式编程的一种形式,它简化了代码的书写和理解,提高了代码的可读性和可维护性。匿名函数的学习需要掌握其定义和使用方式,掌握它常见的方法也能够有效提升代码的开发效率。