stream 流

**

JDK8 Stream 流

**
概述
继Java 8系列之Lambda表达式之后,我们来了解Stream。Stream 是用函数式编程方式在集合类上进行复杂操作的工具,其集成了Java 8中的众多新特性之一的聚合操作,开发者可以更容易地使用Lambda表达式,并且更方便地实现对集合的查找、遍历、过滤以及常见计算等。

创建Stream
我们有多种方式生成Stream:

  • Stream接口的静态工厂方法(注意:Java8里接口可以带静态方法);
  • Collection接口和数组转换成Stream ;
  • 通过Stream.of(T) 静态方法创建流;

在这里插入图片描述

Stream API 使用:

filter
filter方法对原Stream按照指定条件过滤,在新建的Stream中,只包含满足条件的元素,将不满足条件的元素过滤掉。

在这里插入图片描述

ArrayList<String> list = new ArrayList<String>();
		list.add("A1");
		list.add("A2");
		list.add("A3");
		list.add("A4");
		list.add("A5");
		Stream<String> stream = list.stream(); //collection 转 stream
		list.stream().filter((str)->str != "A4").forEach((str)->System.out.println(str));

在这里插入图片描述

forEach
forEach方法前面已经用了好多次,其用于遍历Stream中的所元素,避免了使用for循环,让代码更简洁,逻辑更清晰。

Stream.of("1","2").forEach((str)->System.out.println(str));

在这里插入图片描述

map
map方法将对于Stream中包含的元素使用给定的转换函数进行转换操作,新生成的Stream只包含转换生成的元素。为了提高处理效率,官方已封装好了,三种变形:mapToDouble,mapToInt,mapToLong。其实很好理解,如果想将原Stream中的数据类型,转换为double,int或者是long是可以调用相对应的方法。

Stream<String> stream2 = Stream.of("1","2","3");
		// map 方法参数 function<T,R> 相当于映射 将T转为R类型
		Stream<Integer> stream2New = stream2.map((str)->{return Integer.parseInt(str);});
		stream2New.forEach((str)->System.out.println(str));

在这里插入图片描述

count
count方法将返回Stream中元素的个数。(相当于集合中size)

Stream<String> stream3 = Stream.of("1","2","3");
		System.out.println(stream3.count()); //相当于集合中的size 统计元素个数

limit
limit方法将截取原Stream,截取后Stream的最大长度不能超过指定值N。如果原Stream的元素个数大于N,将截取原Stream的前N个元素;如果原Stream的元素个数小于或等于N,将截取原Stream中的所有元素。

Stream<String> stream4 = Stream.of("1","2","3");
		stream4.limit(2).forEach((str)->System.out.println(str)); //将stream 中的数据进行截取 返回新的流

skip
skip方法将过滤掉原Stream中的前N个元素,返回剩下的元素所组成的新Stream。如果原Stream的元素个数大于N,将返回原Stream的后(原Stream长度-N)个元素所组成的新Stream;如果原Stream的元素个数小于或等于N,将返回一个空Stream。

Stream<String> stream5 = Stream.of("1","2","3");
stream5.skip(2).forEach((str)->System.out.println(str)); //从stream 中跳过指定索引的流,指定索引大于索引个数将返回空流

concat
concat方法将两个Stream连接在一起,合成一个Stream。若两个输入的Stream都时排序的,则新Stream也是排序的;若输入的Stream中任何一个是并行的,则新的Stream也是并行的;若关闭新的Stream时,原两个输入的Stream都将执行关闭处理

Stream<String> streamA = Stream.of("1","2","3");
		Stream<String> streamB = Stream.of("3","2","1");
		Stream.concat(streamA, streamB).forEach((str)->System.out.println(str)); //stream 静态方法 concat 将两个流合并一起返回新流

持续更新~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值