1.引言
Stream流是什么?Stream是一种处理集合数据的方式,可以对集合中的元素进行过滤、截取、排序等操作,并生成新的集合或计算结果。Stream并不是存储数据的数据结构,它只是对集合数据的一种流式处理方式。可以将Stream看作是一个“流水线”,将集合中的每个元素传递到流水线上,经过一系列的操作后,生成新的集合或计算结果。在Java1.8中正式引入了StreamAPI,提供了一种新的处理集合数据的方式。Stream流不仅可以简化代码,还可以提高代码的可读性和可维护性。本篇博客将详细介绍Stream流的特点和用法。
2.生成Stream流
常见的Stream流的获取方式如下:
接下来我们来详细介绍每一种Stream流获取方式。
2.1单列集合获取Stream
List<String> list = new ArrayList<>();
Collections.addAll(list,"a","b","c");
Stream<String> stream = list.stream();
stream.forEach(s -> System.out.println(s));
在这个例子中,我们有一个包含三个字符串的List集合,然后我们通过调用stream()
方法获取了一个Stream对象,并通过foreach操作,将Stream流中的对象全部打印出来,s依次表示流水线上的每一个数据。
2.2双列集合获取Stream
需要注意的是双列集合并没有直接获取Stream流的方式,我们需要先将map集合转换成set集合,从而间接的生成stream流。示例:
Map<Integer,String> map = new HashMap<>();
map.put(1,"a");
map.put(2,"b");
map.put(3,"c");
map.put(4,"d");
//获取stream流的第一种方式:
map.keySet().stream().forEach(s -> System.out.println(s));
//获取stream流的第二种方式:
map.entrySet().stream().forEach(s -> System.out.println(s));
2.3数组获取Stream流
int arr[] = {1,2,3,4,5};
Arrays.stream(arr).forEach(s -> System.out.println(s));
如上例所示,数组获取stream流需要使用Arrays工具类中的stream方法。
2.4零散数据获取Stream流
对应零散数据,想要生成Stream流需要使用Stream接口中的of方法生成流,示例如下:
Stream<String> stringStream = Stream.of("a", "b", "c", "d", "e");
Stream<Integer> integerStream = Stream.of(1, 2, 3, 4, 5););
需要注意的是这一堆零散的数据的类型必须相同,否则将会报错,如:
3.Stream流的中间操作
中间操作的意思是,执行完此方法之后,Stream流依然可以继续执行其他操作,中间操作会返回一个新的Stream对象。
常见的中间操作包括:
(1).filter:过滤集合中满足条件的元素
Stream<Integer> stream = list.stream().filter(n -> n % 2 == 0);
上面的代码将创建一个新的Stream对象,其中只包含list中的偶数元素。
(2).sorted:对集合中的元素进行排序。
Stream<Integer> stream = list.stream().sorted();
上面的代码将创建一个新的Stream对象,其中元素按照自然顺序进行升序排序。
(3).distinct:去除集合中重复的元素。
Stream<Integer> stream = list.stream().distinct();
上面的代码将创建一个新的Stream对象,其中元素不包含重复的值。
(4).limit / skip:截取Stream的前几个或跳过前几个元素。
Stream<Integer> stream = list.stream().limit(3);
上面的代码将创建一个新的Stream对象,其中只包含list中的前三个元素。
4.Stream流的终结操作方法
终结操作的意思是,执行完此方法之后,Stream流将不能再执行其他操作。
常见的终端操作包括:
(1).forEach:遍历Stream中的元素。
stream.forEach(System.out::println);
上面的代码将依次输出Stream中的每个元素。
(2).collect:将Stream中的元素收集到一个新的集合中。
List<Integer> newList = stream.collect(Collectors.toList());
上面的代码将创建一个新的List对象,其中包含Stream中的所有元素。除此之外,还有toSet()方法和toMap()方法,分别将
(3).count:统计Stream中元素的个数。
long count = stream.count();
上面的代码将统计Stream中元素的个数,并将结果赋值给变量count。
好了,今天的内容就到处为止,学习java是一个漫长的过程,大家加油!路漫漫其修远兮,吾将上下而求索。