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

如何在Java中使用Stream函数来操作数据集合?

发布时间:2023-05-28 01:05:09

Java 中的 Stream 是一种通过声明式方式对集合进行操作的 API,提供了一种简便、高效、可复合的方法来处理数据集合。Stream 函数主要分为中间操作和终止操作两类,其中中间操作可以多次连接,形成一个管道,最后由终止操作进行处理。下面将介绍 Java Stream 中的常见使用方法。

1、从集合生成流

我们可以从 Collection 或者数组中生成一个 Stream。示例如下:

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

String[] arr = {"apple", "banana", "orange", "pear"};
Stream<String> arrayStream = Arrays.stream(arr);

2、中间操作:过滤、映射、去重、排序、截取等

中间操作可以多次连接成一个管道,主要作用是筛选、转换、排序和截取等。

(1)过滤

通过 filter 方法,我们可以将 Stream 中的元素按照指定条件进行筛选。

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

stream.filter(str -> str.startsWith("a")).forEach(System.out::println);

(2)映射

通过 map 方法我们可以将 Stream 中的元素进行转换,转换成另一种类型的元素。

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

stream.map(String::toUpperCase).forEach(System.out::println);

(3)去重

通过 distinct 方法我们可以将 Stream 中的重复元素去除。

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

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

(4)排序

通过 sorted 方法我们可以将 Stream 中的元素进行排序。

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

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

(5)截取

通过 limit 方法我们可以截取 Stream 中指定数量的元素。

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

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

3、终止操作:聚合、收集、归约、遍历等

(1)聚合

通过 count、max、min、sum、average 方法可以对 Stream 中的元素进行聚合计算。

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

long count = stream.count();
int max = list.stream().max(Integer::compareTo).get();
int min = list.stream().min(Integer::compareTo).get();
int sum = list.stream().mapToInt(Integer::intValue).sum();
double average = list.stream().mapToInt(Integer::intValue).average().orElse(0.0);

System.out.println("count: " + count);
System.out.println("max: " + max);
System.out.println("min: " + min);
System.out.println("sum: " + sum);
System.out.println("average: " + average);

(2)收集

通过 collect 方法我们可以将 Stream 中的元素收集到新的集合中。

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

List<String> newList = stream.collect(Collectors.toList());
System.out.println(newList);

(3)归约

通过 reduce 方法可以将 Stream 中的所有元素归约为一个结果。

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

int sum = stream.reduce(0, Integer::sum);
System.out.println("sum: " + sum);

(4)遍历

通过 forEach 方法我们可以对 Stream 中的元素进行遍历操作。

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

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

以上是 Java Stream 中常见的使用方法,我们可以根据实际需求灵活使用。使用 Stream 可以极大地提升书写效率,简洁易懂,并且能够更好地体现 Java 8 的函数式编程思想。