Java 8 Stream (一)

Stream:并不是以前IO中的Stream流,在java8中的package java.util.stream包中;java 8的函数式编程重点在于Lambda和Stream一起使用方能发挥最大威力,代码简介(可以不写for循环),多核友好(并行程序只需要调用parallel()方法即可),Stream并不是一种数据结构,他只是数据源的一中视图,数据源可以是一个数组,容器,IO流等等,可以说Stream是为java的函数式编程而生。

1:Stream整体架构

2:常见的Stream接口继承关系如图

图中4种Stream接口均继承BaseStream接口,对应三种基本类型(int,long,double),但他不是一个包装类型,这样不仅提高了性能还增加了特定的接口函数

Stream特点

无存储:Stream不是一种数据结构,只是某种数据源的视图

为函数式编程而生:对Stream的如何操作都不会修改其数据源,比如对其过滤操作后并不会将其删除过滤的元素,而是产生一个个满足过滤需求的Stream

惰性执行:Stream并不是立即执行,而是在用户需要Stream的操作结果的时候才会执行

可消费性:只能被操作一次,比如遍历过后便会生效

对Stream的操作可分为两类

其一:中间操作总是会惰性执行:调用中间操作只会生成一个标记了该操作的心Stream,仅此而已

其二:结束操作会触发实际计算:计算发生时会把所有的中间操作积攒的操作以pipeline的方式执行,这样可以减少迭代次数,计算之后Stream就会失效

Stream接口常见的方法

Stream常见接口分类
中间操作concat(),distinct(),filter(),flatMap(),limit(),map(),peek(),skip(),sorted(),parallel(),sequential(),unordered()....
结束操作allMatch(),anyMatch(),collect(),count(),findAny(),findFirst(),forEach(),forEachOrdered(),max(),min(),reduce().....

forEach()方法:查看源码可知方法签名为

 void forEach(Consumer<? super T> action);

由于forEach是结束方法,下面代码会立即执行,输出所有结果

        Stream<String> stringStream=Stream.of("I","Love","Coding","U");
        stringStream.forEach(s -> System.out.println(s));

filter()方法:查看源码可知方法签名为:

Stream<T> filter(Predicate<? super T> predicate);

返回一个满足条件的Stream

stringStream.filter(s -> s.length()==1).forEach(s -> System.out.println(s));

distinct()方法:返回一个去处重复元素的Stream

sort()方法:排序(字符串默认由长到短),可自行定义

 stringStream.sorted((str1, str2) -> str1.length()-str2.length())
                .forEach(str -> System.out.println(str));

map():转换后Stream个数不变,类型取决于转换后的类型,

其余方法不再一一赘述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值