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

Java函数式编程入门:基础语法及用法

发布时间:2023-06-10 15:26:55

什么是函数式编程

函数式编程(Functional Programming,简称FP)是一种编程范式,它将计算机运算视为数学函数的计算,并且避免使用任何状态可变的数据,即无副作用。与面向对象编程的重点在于数据和对象不同,函数式编程的重点在于函数。函数式编程通常与高阶函数、纯函数、惰性求值等概念联系在一起。

Java函数式编程的基础概念

Java 8 引入了函数式接口(Functional Interface)的概念,它是函数式编程的基础概念。简而言之,函数式接口就是只有一个抽象方法的接口,可以使用 lambda 表达式来创建该接口的实例。在 Java 中,@FunctionalInterface 注解用于标注函数式接口。如果一个接口被 @ functionalInterface 注解标注,并且它具有多于一个抽象方法,则编译器会报错。

Java 中常用的函数式接口

Java 8 中提供了以下常用的函数式接口。

1. Consumer<T>:接受一个输入参数并且没有返回值的操作。

2. Function<T, R>:接受一个输入参数并且返回一个结果。

3. Predicate<T>:接受一个输入参数并且返回一个布尔值结果。

4. Supplier<T>:没有任何输入参数,但是返回一个结果。

使用Java函数式编程

下面是一些关于Java函数式编程使用的例子。

1.使用 Consumer<T>

Consumer<T> 接口表示执行带有单个参数的操作,并且没有返回结果。它可以被用于处理流的 forEach() 方法。

示例代码:

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

Consumer<String> consumer = System.out::println;

list.forEach(consumer);

2.使用 Function<T, R>

Function<T, R> 接口表示接收一个参数并返回结果。它可以被用于转换流的元素,例如使用 map() 方法。

示例代码:

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

Function<Integer, String> function = i -> "Number: " + i;

list.stream().map(function).forEach(System.out::println);

3.使用 Predicate<T>

Predicate<T> 接口表示接受一个参数并返回一个布尔值。它可以被用于过滤流的元素,例如使用 filter() 方法。

示例代码:

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

Predicate<Integer> predicate = i -> i % 2 == 0;

list.stream().filter(predicate).forEach(System.out::println);

4.使用 Supplier<T>

Supplier<T> 接口表示接受一个参数并返回一个结果。它可以被用于执行懒加载(Lazy Loading)。

示例代码:

Supplier<String> supplier = () -> "Hello, World!";

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

总结

Java 8 引入了函数式编程的概念,其中最重要的是函数式接口的概念。Java 中常用的函数式接口有 Consumer<T>、Function<T, R>、Predicate<T> 和 Supplier<T>。这些接口可以被用于 Streams、Lambda 表达式等方面。函数式编程通过避免使用可变数据状态和无副作用的思想来提高代码可靠性、可重用性和可读性。