Java中的stream函数:定义和示例
发布时间:2023-06-23 21:47:11
Java8引入了一个新的Stream API,它提供了一种流式处理数据的方法,使得使用者可以轻易地完成复杂的数据处理任务,而不必写复杂的循环或递归。Stream API在Java8中被用于集合以及数组等数据结构,它允许我们使用lambda表达式来编写简洁、可读性强的代码,使我们能够将注意力集中到业务逻辑上。
定义
Java中的Stream是一种函数式编程风格的API,它没有存储数据的能力,而是将元素序列(数据)视为逻辑流,我们可以通过该逻辑流进行多个操作,其中包括筛选、排序、映射等多种方式,最终返回一个或多个结果集。
Stream提供了两种类型的操作:
1、Intermediate(中间操作)操作:这些操作可以按顺序进行链式调用,并将结果返回给下一个操作。Intermediate操作不会执行,直到终端操作被调用。
2、Terminal(终端操作)操作:这些操作是另一个Stream流的最终结果,执行后会产生一个非Stream类型的结果。只能调用一次,当调用一次终端操作后,流将不再可用。
示例
Stream API中提供了众多方法可以对数据进行处理,接下来我们以一个例子来介绍Stream API如何进行操作。
我们现在有一个列表,其中存放了若干个数字,我们要对这些数字进行筛选、排序、映射等操作,最后输出结果:
List<Integer> numbers = Arrays.asList(3, 2, 1, 4, 7, 6, 5);
//筛选出偶数
List<Integer> evens = numbers.stream().filter(x -> x % 2 == 0).collect(Collectors.toList());
System.out.println("The evens are: " + evens); //[2, 4, 6]
//对数据进行排序
List<Integer> sorted = numbers.stream().sorted().collect(Collectors.toList());
System.out.println("The sorted numbers are: " + sorted); //[1, 2, 3, 4, 5, 6, 7]
//将数据进行映射
List<Integer> squares = numbers.stream().map(x -> x * x).collect(Collectors.toList());
System.out.println("The squares are: " + squares); //[9, 4, 1, 16, 49, 36, 25]
//获取最大值
int max = numbers.stream().max(Integer::compare).get();
System.out.println("The max number is: " + max); //7
//获取最小值
int min = numbers.stream().min(Integer::compare).get();
System.out.println("The min number is: " + min); //1
//获取数据总和
int sum = numbers.stream().mapToInt(x -> x).sum();
System.out.println("The sum of numbers is: " + sum); //28
//获取数据平均值
double average = numbers.stream().mapToInt(x -> x).average().getAsDouble();
System.out.println("The average of numbers is: " + average); //4.0
我们可以看到,在使用Stream API时,我们可以通过链式操作来完成多种操作,更加简洁、高效。同时,Stream API也提供了一些常用的方法,如filter、map、sorted、max、min、sum等,使得我们在日常开发中能够更加方便地处理数据。
