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

Java函数式编程:使用流实现数据筛选和转换

发布时间:2023-06-21 22:15:49

Java函数式编程是一种面向对象和函数式编程的混合体。它使程序员能够将函数作为值或参数传递,使Java代码更加简洁和易于维护。在Java 8之后,引入了新的Stream API,使得利用函数式编程的方式进行数据筛选和转换变得更加容易。

使用Stream API进行数据筛选和转换,主要分为三个步骤:创建流(Stream)、中间操作(Intermediate Operations)和结束操作(Terminal Operations)。其中,中间操作可以有多个,但最终必须以结束操作结束。

1. 创建流

Java中的Stream是一种数据流,用于操作数据集合的序列化(流式)视图。在Java 8中,创建Stream有两种方式:通过集合和通过数组。

通过集合创建Stream:

List<String> languages = Arrays.asList("Java", "C++", "Python", "Ruby", "JavaScript");
Stream<String> stream = languages.stream();

通过数组创建Stream:

int[] numbers = { 1, 2, 3, 4, 5 };
IntStream stream = Arrays.stream(numbers);

2. 中间操作

中间操作可以逐个操作数据集合的元素,因此也被称为惰性求值操作。中间操作不会直接输出结果,而是将结果保存下来,以便进行最终的终止操作。

例如,我们可以使用filter()方法过滤集合中的元素:

Stream<String> filtered = stream.filter(s -> s.startsWith("J"));

方法filter()会创建一个新的Stream,其中只包含集合中以“J”开头的元素。另一个中间操作是map(),它可以将集合中的元素映射成另外一种类型的元素。例如,我们可以将集合中的字符串转换为它们的长度:

Stream<Integer> lengths = stream.map(String::length);

在这里,map()方法将集合中的字符串映射为整数,这里使用String::length方法引用,表示调用字符串的length()方法。

我们还可以使用sorted()方法对集合中的元素进行排序:

Stream<String> sorted = stream.sorted();

3. 结束操作

在执行完中间操作之后,必须进行结束操作(Terminal Operations),以便Stream输出结果。

例如,我们可以使用count()方法计算集合中元素的数量:

long count = stream.count();

另一个终止操作是forEach()方法。它可以对集合中的每个元素执行代码块:

stream.forEach(System.out::println);

在这里,我们使用System.out::println作为forEach()方法的参数,表示对每个元素执行System.out.println()方法。

完整的代码示例:

import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;

public class StreamDemo {
    public static void main(String[] args) {
        List<String> languages = Arrays.asList("Java", "C++", "Python", "Ruby", "JavaScript");
        Stream<String> stream = languages.stream();

        Stream<String> filtered = stream.filter(s -> s.startsWith("J"));

        Stream<Integer> lengths = stream.map(String::length);

        Stream<String> sorted = stream.sorted();

        long count = stream.count();

        stream.forEach(System.out::println);
    }
}

这是一个简单的Java程序,它演示了如何使用Java 8中的Stream API实现数据筛选和转换。使用Stream API可以使代码更加简洁易于阅读,因为它简化了集合操作。