Java集合Stream流操作的基本使用教程分享
什么是Java集合Stream流?
Java集合Stream流是Java 8新增的一个处理集合数据的API。集合Stream流本质上是一个“管道”或者“流水线”,它可以通过一系列中间操作对数据进行处理。中间操作不会导致数据计算,只会记录操作,而最终的操作称为终端操作,会触发所有中间操作的计算并返回一个结果。
Java集合Stream流基本操作
Java集合Stream流基本操作分为三步:获取集合数据流、中间操作和终端操作。下面通过一个集合Stream流处理示例来介绍它们的使用方法:
List<String> list = Arrays.asList("Java", "Python", "C#", "JavaScript");
Stream<String> stream = list.stream(); // 获取集合数据流
stream.filter(str -> str.startsWith("J")) // 中间操作:过滤以J开头的字符串
.forEach(System.out::println);// 终端操作:打印符合条件的字符串
输出结果为:
Java
- 第一步:获取集合数据流
Java集合框架中可以通过以下方式获取Stream流对象:
stream() // 通过Stream接口的stream方法获取Stream流对象
parallelStream() // 通过Collection接口的parallelStream方法获取并发流
- 第二步:中间操作
集合Stream流提供了许多中间操作,可以对数据进行过滤、映射、排序等操作。常用的中间操作有:
filter(Predicate<T> p) // 过滤符合条件的元素
map(Function<T, R> mapper) // 根据指定的函数将每个元素转换成新的元素
flatMap(Function<T, Stream<R>> mapper) // 根据指定的函数将每个元素转换成新的流
sorted() // 对数据进行排序
limit(long n) // 限制返回元素的数量
distinct() // 去重
- 第三步:终端操作
集合Stream流提供了许多终端操作,可以对数据进行计算、归约、收集等操作。常用的终端操作有:
forEach(Consumer<T> action) // 对每个元素执行指定的操作
toArray() // 将流中的元素转换为一个数组
reduce(BinaryOperator<T> accumulator) // 归约,将元素组合起来
collect(Collector<T, A, R> collector) // 将流中的元素收集到一个容器中
count() // 统计元素的数量
Java集合Stream流示例1:查找集合中的最大值
List<Integer> list = Arrays.asList(1, 3, 5, 7, 9, 2, 4, 6, 8);
Optional<Integer> max = list.stream().max(Comparator.naturalOrder());
System.out.println("最大值为:" + max.get());
输出结果为:
最大值为:9
Java集合Stream流示例2:从集合中获取指定元素的平均值
List<Student> students = Arrays.asList(
new Student("Tom", 18, 80),
new Student("Jack", 19, 90),
new Student("Lucy", 17, 85),
new Student("Lily", 20, 92)
);
double avgScore = students.stream().filter(student -> student.getName().equals("Tom"))
.mapToInt(Student::getScore).average().getAsDouble();
System.out.println("Tom的平均分数为:" + avgScore);
示例中定义了一个Student类,该类包含姓名、年龄和成绩三个属性。代码根据姓名为“Tom”的学生计算出了平均成绩并打印结果。
输出结果为:
Tom的平均分数为:80.0
结论
Java集合Stream流是一个强大的数据处理工具,可以在短时间内完成数据处理任务。通过本文的介绍,您已经掌握了Java集合Stream流的基本用法及常用操作。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java集合Stream流操作的基本使用教程分享 - Python技术站