Stream流

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是一个漫长的过程,大家加油!路漫漫其修远兮,吾将上下而求索。

  • 18
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值