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

Java函数式编程入门教程

发布时间:2023-06-08 01:19:19

函数式编程越来越受到程序员的重视,本篇文章为初学者提供了一份 Java 函数式编程入门教程。

1. Lambda表达式

Lambda 表达式是 Java 8 中引入的一种新特性,它允许我们以更简洁的方式来定义函数。Lambda 表达式的语法如下所示:

(parameter list) -> {lambda body}

其中,参数列表是一个用逗号分隔的参数列表,可以为空,如果只有一个参数,则可以省略括号;箭头 -> 指示了参数列表与lambda体之间的关系;lambda体可以是一个表达式或一段代码块。

示例代码:

// 1. 无参数 lambda 表达式

() -> System.out.println("Hello World!");

// 2. 有一个参数的 lambda 表达式

x -> x * x

// 3. 多个参数的 lambda 表达式

(x, y) -> x + y

// 4. 多行 lambda 表达式

x -> {

    int result = x * x;

    return result;

}

2. 函数式接口

函数式接口是只包含一个抽象方法的接口。Java 8 中引入了一些新的接口,如Consumer、Supplier、Function、Predicate等,它们被称为函数式接口,供Lambda 表达式使用。我们可以使用@FunctionalInterface注解来标记接口是函数式接口(此注解并不会强制要求接口只有一个抽象方法,但是编译器会检查并提示错误)。

示例代码:

// 定义一个函数式接口

@FunctionalInterface

public interface MyFunctionalInterface {

    void doSomething();

}

// 使用 lambda 表达式实现上述函数式接口

MyFunctionalInterface mfi = () -> {

    System.out.println("Hello, World!");

};

mfi.doSomething();

3. 方法引用

方法引用是另一种简化 Lambda 表达式的方法,它使用“::”操作符来引用方法。方法引用共有 4 种方式:

(1) 静态方法引用

示例代码:

// 静态方法的引用

Function<Integer, Integer> f = Math::abs;

System.out.println(f.apply(-123)); // 输出: 123

(2) 实例方法引用

示例代码:

// 实例方法的引用

String s = "Hello, World!";

Function<Integer, Character> f = s::charAt;

System.out.println(f.apply(6)); // 输出: W

(3) 对象的方法引用

示例代码:

// 对象的方法引用

List<String> list = Arrays.asList("a", "b", "c");

Consumer<String> c = list::add;

c.accept("d");

System.out.println(list); // 输出: [a, b, c, d]

(4) 构造函数引用

示例代码:

// 构造函数的引用

Supplier<List<String>> s = ArrayList::new;

List<String> list = s.get();

list.add("a");

list.add("b");

System.out.println(list); // 输出: [a, b]

4. 流(Stream)

流是 Java 8 中引入的一种新的处理数据集合的方式,它可以让我们以声明性的方式操作数据集合,例如过滤、映射、聚合等。流分为中间操作和终止操作,中间操作会返回一个新的流,而终止操作会将流转换为其他数据结构或生成最终结果。

示例代码:

// 过滤

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

List<Integer> result = list.stream()

                           .filter(x -> x % 2 == 0)

                           .collect(Collectors.toList());

System.out.println(result); // 输出: [2, 4, 6, 8, 10]

// 映射

List<String> list = Arrays.asList("apple", "orange", "banana");

List<Integer> result = list.stream()

                           .map(x -> x.length())

                           .collect(Collectors.toList());

System.out.println(result); // 输出: [5, 6, 6]

// 聚合

List<Integer> list = Arrays.asList(1, 2, 3, 4);

int sum = list.stream()

              .reduce(0, (x, y) -> x + y);

System.out.println(sum); // 输出: 10

以上就是 Java 函数式编程的入门教程。在实际应用中,函数式编程可以帮助我们写出更加简洁、清晰、易于维护的代码,大大提高代码的可读性和可维护性。