JDK8新特性之---Stream操作

java8中新增的特性旨在帮助程序员写出更好的代码,对核心类库的改进是最关键的一部分。对核心类库的改进主要包括集合类的API和新引入的流stream

流式写法最常见的就是对集合进行操作  
判断一个操作是 惰性求值 还是 及早求值 很简单,看它的返回值。
如果返回值是Stream则是惰性求值;如果返回值是另一个数值或者为空,则是及早求值

此处我们先介绍下创建stream流的几种常见方式:

        //第一种 基本方式
        Stream stream = Stream.of("a","b","c");
        
        //第二种 数组方式
        String [] strArray = new String[] {"a", "b", "c"};
        stream = Stream.of(strArray);
        stream = Arrays.stream(strArray);
        
        //第三种 集合方式
        List<String> list = Arrays.asList(strArray);
        stream = list.stream();

惰性求值  例子:

 

及早求值  例子:

 

另外常见的forEach()函数是terminal操作,因为执行它之后,Stream的元素被消耗掉了,你无法对一个Stream进行两次terminal运算,效果见下图,只打印一次。

 

流转化为其他数据结构例子如下图:

 

当然流的操作函数也很多,大家可以都尝试下,我这里提供一个例子,如下图:

最近看这个比较多,最后做个Stream总结;

        1. 不是数据结构,它没有内部存储,它只是用操作管道从 source(数据结构、数组、 generator function、
        IO channel)抓取数据
        2. 它也绝不修改自己所封装的底层数据结构的数据。例如 Stream 的 filter 操作会产生一个不包含被过滤元
        素的新 Stream,而不是从 source 删除那些元素
        3. 所有 Stream 的操作必须以 lambda 表达式为参数
        4. 惰性化,很多 Stream 操作是向后延迟的,一直到它弄清楚了最后需要多少数据才会开始,Intermediate
        操作永远是惰性化的。
        5. 当一个 Stream 是并行化的,就不需要再写多线程代码,所有对它的操作会自动并行进行的

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值