Java Stream是在Java 8中引入的一种全新的API,它主要用于处理集合类数据(数组、List、Set等)并支持函数式编程,提供流式操作的方法,使得操作简洁高效。本文将从Java Stream的基本概念和创建方法两个方面,为大家介绍Java Stream的使用技巧。
基本概念
流
Java Stream 是数据渠道,用于操作数据源(例如:集合、数组等)所生成的元素序列。"Stream"(流)指的是数据在一个一个的管道中传输,最终到达一个处理的目的地,类似于UNIX系统中的管道。
流的操作
Stream 操作可以分为两种类型:中间操作和终止操作。
中间操作
中间操作会返回一个新的 Stream,这样操作就变成了一个 filter-map-filter 结构,即多个操作会形成一个流水线,除非流水线上触发一个终止操作,否则中间操作不会执行任何处理。
示例1:过滤数组中的负数并对剩余的数进行平方处理
int[] nums = {-1, 2, -3, 4, -5};
IntStream.of(nums)
.filter(num -> num > 0)
.map(num -> num * num)
.forEach(System.out::println);
上述代码中,IntStream.of(nums) 将数组转换为一个流,filter() 函数过滤掉小于0的元素,map() 函数对剩余的元素进行平方处理,最后通过forEach() 函数输出结果。
终止操作
终止操作会触发 Stream 的计算,并产生一些结果,该结果可以是任何不同的数据类型,例如:list、set、map、某个值或副作用等。终止操作后,Stream 不可再使用。
示例2:将一个数组中的元素累加求和
int[] nums = {1, 2, 3, 4, 5};
int sum = IntStream.of(nums).sum();
System.out.println(sum); // 输出15
上述代码中,IntStream.of(nums) 将数组转换为一个流,sum() 函数计算数组中所有元素的和。
创建方法
Java Stream提供了多种创建方式,主要分为以下几类:
从集合中创建
Java8 中的 Collection 接口被扩展,提供了 stream() 和 parallelStream() 方法,可以通过流式语法对集合元素进行操作。
示例3:从List中创建流并对元素进行过滤和排序
List<String> list = Arrays.asList("java","c++","python","javascript");
list.stream()
.filter(s -> s.startsWith("j"))
.sorted()
.forEach(System.out::println);
上述代码中,首先通过Arrays.asList()创建一个List集合,然后调用stream()函数转换成一个Stream,接着对Stream进行 filter() 过滤,sorted() 排序,最后通过forEach() 输出结果。
从数组中创建
Java还提供了 Arrays.stream() 方法,可以直接将数组转换为一个 Stream 对象 ,对于基本数据类型的数组,可以使用 Arrays 类的 stream() 方法来生成流。
示例4:从数组中创建流并对元素进行操作
int[] array = {1, 2, 3, 4, 5};
IntStream intStream = Arrays.stream(array);
intStream.filter(x -> x % 2 == 0)
.map(x -> x + 1)
.forEach(System.out::println);
上述代码中,首先通过 Arrays.stream() 创建一个 IntStream 对象,然后通过 filter() 和 map() 对元素进行过滤和映射处理,最后通过 forEach() 输出结果。
通过 Stream.generate() 或 Stream.iterate() 创建
Java提供 Stream.generate() 方法来创建 Stream,可以生成一个无限长度的 Stream,将生成的 Stream 存储到集合中,避免出现无限长度 Stream 导致的问题。
示例5:使用 Stream.generate() 创建流
Stream<Integer> stream = Stream.generate(() -> {
return (int)(Math.random() * 100);
});
stream.limit(5).forEach(System.out::println);
上述代码中,Stream.generate() 创建了一个无限长度的随机数流,然后通过 limit() 函数限制元素个数,最后使用 forEach() 遍历输出结果。
通过其他方式创建
除了以上介绍的几种方法外,Java Stream还可以通过 BufferedReader.lines() 方法来从文件中逐行读取数据,或者通过 Pattern.splitAsStream() 方法来将字符串转换为流。
以上例子只是Java Stream的简单应用,还有很多关于 Java Stream 的操作和技巧值得探索。通过上述介绍,相信大家已经能够熟练使用Java Stream进行开发了。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java Stream的基本概念以及创建方法 - Python技术站