在Java 8中,引入了一种新的抽象概念——流(Stream),流是一系列元素的序列,可以对元素进行各种操作,如过滤、映射、减少等,流的操作可以是顺序的,也可以是并行的,流的操作可以链式调用,使得代码更加简洁易读,本文将从流的基本概念、创建流、基本操作以及使用场景等方面进行详细介绍。
流的基本概念
1、流的元素:流中的元素可以是任意类型的对象,包括原始类型和引用类型。
2、流的操作:流的操作可以分为中间操作和终止操作,中间操作返回一个新的流,而终止操作返回一个最终结果。
3、流的状态:流有两种状态:中间状态和终止状态,中间状态表示流中还有元素未处理,终止状态表示流中所有元素都已处理完毕。
4、流的并行性:流可以并行处理,以提高处理速度,默认情况下,流是顺序处理的;可以通过parallel()
方法将流转换为并行流。
创建流
创建流的方式有以下几种:
1、通过集合创建流:可以使用Stream.of()
方法将集合转换为流。
List<String> list = Arrays.asList("A", "B", "C"); Stream<String> stream = list.stream();
2、通过数组创建流:可以使用Arrays.stream()
方法将数组转换为流。
int[] arr = {1, 2, 3}; Stream<Integer> stream = Arrays.stream(arr);
3、通过迭代器创建流:可以使用StreamSupport.stream()
方法将迭代器转换为流。
Iterator<String> iterator = Arrays.asList("A", "B", "C").iterator(); Stream<String> stream = StreamSupport.stream(Spliterators.spliteratorUnknownSize(iterator, 0), false);
4、通过生成器创建流:可以使用Stream.generate()
方法根据给定的生成器函数创建一个无限流。
Stream<Integer> stream = Stream.generate(() -> (int) (Math.random() * 10));
基本操作
1、过滤(filter):根据给定的条件过滤流中的元素。
stream.filter(x -> x % 2 == 0);
2、映射(map):将流中的每个元素应用给定的函数进行转换。
stream.map(String::toUpperCase);
3、减少(reduce):将流中的所有元素组合成一个值,需要提供一个初始值和一个二元操作符。
Optional<String> result = stream.reduce((a, b) -> a + b);
4、收集(collect):将流中的元素收集到一个目标容器中,可以指定收集方式,如列表、集合、映射等。
List<String> list = stream.collect(Collectors.toList()); Set<String> set = stream.collect(Collectors.toSet()); Map<String, Integer> map = stream.collect(Collectors.toMap(Function.identity(), String::length));
使用场景
1、数据处理:对大量数据进行处理,如过滤、映射、减少等操作。
2、数据转换:将一种数据结构转换为另一种数据结构,如集合与列表、映射与列表等。
3、数据聚合:对数据进行统计、汇总等操作,如求和、计数、平均值等。
4、数据筛选:根据条件筛选出符合条件的数据。
5、数据排序:对数据进行排序,如升序、降序等。
6、数据去重:去除数据中的重复元素。
7、数据转换:将一种数据格式转换为另一种数据格式,如JSON与XML等。
还没有评论,来说两句吧...