JavaStreamAPI和中间操作函数
JavaStreamAPI是Java 8中新增的一个功能,它可以用来处理集合、数组等数据结构,提供了一组丰富的操作函数来处理数据。通常,JavaStreamAPI被分为两类:中间操作和终端操作。中间操作是通过链式操作进行组合的一系列函数,它们通常用于过滤或转换数据。而终端操作是最终执行的操作函数,它们通常用于将数据收集到某个地方,或者对数据进行数据统计和计算。这篇文章将主要介绍Java Stream API中间操作函数的基本知识。
1. Filter函数
Filter函数是Java Stream API中最简单的中间操作函数之一,它可以通过一个条件判断来过滤集合中的数据。Filter函数接收一个Lambda表达式作为其参数,此Lambda表达式采用与接口Predicate相同的签名。在该Lambda表达式中,我们可以定义一个布尔值表达式,该表达式的结果将用于过滤该数据集。例如,我们可以过滤一个字符串数组,只显示以“a”开头的字符串。下面是Filter函数的使用示例:
String[] names = {"apple", "banana", "cat", "ali"};
List<String> result = Arrays.stream(names)
.filter(s -> s.startsWith("a"))
.collect(Collectors.toList());
在这个例子中,我们将字符串数组“names”转化为一个流,然后使用Filter函数过滤以“a”开头的字符串,并将结果作为一个List进行收集。本例的输出结果如下:
["apple", "ali"]
2. Map函数
Map函数是另一个常用的中间操作函数,它可以对数据集的每个元素执行一个转换,例如将一个元素进行某种转换,然后返回一个新的元素。在Map函数中,我们将一个Lambda表达式传递给其参数,该Lambda表达式将用于转换每一个元素。例如,我们可以将一个整数数组中的每个元素乘以2,然后将结果存储到另一个数组中。下面是Map函数的使用示例:
int[] nums = {1, 2, 3, 4, 5};
int[] result = Arrays.stream(nums)
.map(n -> n * 2)
.toArray();
在这个例子中,我们将整数数组“nums”转换为一个流,然后使用Map函数将每个元素乘以2,并将结果作为一个新的整数数组返回。本例的输出结果如下:
[2, 4, 6, 8, 10]
3. FlatMap函数
FlatMap函数是一种比较特殊的中间操作函数,它可以将多个数据集合并成一个单独的数据流,例如将多个列表合并成一个列表。在FlatMap函数中,我们将一个Lambda表达式传递给其参数,该表达式将用于将一个集合转换为另一个集合。例如,我们可以将一个字符串数组中的所有单词合并成一个唯一的单词列表。下面是FlatMap函数的使用示例:
String[] lines = {"hello world", "java is awesome", "programming is fun"};
List<String> result = Arrays.stream(lines)
.flatMap(line -> Arrays.stream(line.split(" ")))
.distinct()
.collect(Collectors.toList());
在这个例子中,我们使用FlatMap函数将字符串数组“lines”中的每个字符串分割为单个单词,并将结果作为一个列表返回。我们还使用distinct函数来去除列表中的重复元素。本例的输出结果如下:
["hello", "world", "java", "is", "awesome", "programming", "fun"]
4. Sorted函数
Sorted函数是一种用于对数据流进行排序的中间操作函数。它可以基于某个条件对数据流中的元素进行排序,例如按字母顺序排序或按数字大小排序。在Sorted函数中,我们可以将一个Lambda表达式传递给其参数,该表达式将用于指定排序方法。例如,我们可以将一个字符串数组中的所有元素按字母顺序进行排序。下面是Sorted函数的使用示例:
String[] names = {"Faye", "Bob", "Alice", "John"};
List<String> result = Arrays.stream(names)
.sorted((s1, s2) -> s1.compareTo(s2))
.collect(Collectors.toList());
在这个例子中,我们使用Sorted函数将字符串数组“names”中的每个字符串按字母顺序排序,并将结果作为一个新的列表返回。本例的输出结果如下:
["Alice", "Bob", "Faye", "John"]
5. Distinct函数
Distinct函数是一种用于筛选出数据流中的唯一元素的中间操作函数。它可以通过去除数据流中重复的元素,从而返回一个新的唯一元素的数据流。在Distinct函数中,我们无需传递任何参数,只需要执行函数即可。例如,我们可以将一个字符串数组中的所有唯一元素筛选出来。下面是Distinct函数的使用示例:
String[] names = {"Faye", "Bob", "Alice", "Alice", "John"};
List<String> result = Arrays.stream(names)
.distinct()
.collect(Collectors.toList());
在这个例子中,我们使用Distinct函数来筛选出字符串数组“names”中的所有唯一元素,并将结果作为一个新的列表返回。本例的输出结果如下:
["Faye", "Bob", "Alice", "John"]
总结
本文介绍了Java Stream API中的一些中间操作函数的常用方法。这些函数在处理集合数据时非常有用,可以帮助我们对数据进行过滤、转换、排序和筛选等操作。在实际开发中,可以根据需要选择合适的中间操作函数,以满足我们的需求。
