zoukankan      html  css  js  c++  java
  • Java8 Stream

    概述

    Java8 API中添加了一个新的抽象成为流Stream,可以以一种声明的方式处理数据。

    Stream与java.io包中的InputStream和OutputStream是完全不同的概念。Java8中的Stream是对集合对象功能的增强,专注与对集合对象进行各种非常便利、高效的聚合操作,或大批量数据操作。

    Stream就像一个高级版本的迭代器,用户只要给出需要对其包含的元素是执行什么操作,Stream会在内部隐式进行遍历,做出相应的数据转换。

    Stream和迭代器又有不同,Stream可以并行操作,即将数据分为多段,其中每一个都在不同的线程中处理,然后将结果一起输出。

    先看下面一个例子:

    Java8 Stream

    通过这个例子,可以看出引入流的操作后代码的简洁。

    使用

    使用Stream的步骤如下:

    1. 创建Stream
    2. 通过一个或多个中间操作将流转换成另一个流
    3. 通过中止操作获取结果.

    1.创建Stream

    集合类Collection:

    • stream(): 创建串行流
    • parallelStream(): 创建并行流

    数组:

    Arrays.stream(arr): 通过静态方法获取数组的串行流

    Arrays.stream(arr, int, int): 返回数组的串行流,指定数组范围

    数字类:

    IntStream: 整型的流接口, 有如下静态方法:

    • empty(): 获取一个空的串行流
    • generate(IntSupplier): 返回指定接口产生的数字无限流
    • of(int,int...): 返回指定数字的串行流
    • of(int): 返回包含指定数字的串行流
    • range(start, end): 返回从start到end的整数流, 前闭后开
    • rangeClosed(start, end): 返回从start到end的整数流, 前闭后闭

    DoubleStream: 小数的流接口, 有如下静态方法:

    • of(double,double...): 返回指定数字的串行流
    • of(double): 返回包含指定数字的串行流
    • generate(IntSupplier): 返回指定接口产生的数字无限流

    LongStream: 长整形的流接口, 有如下静态方法:

    • generate(IntSupplier): 返回指定接口产生的数字无限流
    • of(long,long...): 返回指定数字的串行流
    • of(long): 返回包含指定数字的串行流
    • range(start, end): 返回从start到end的整数流, 前闭后开
    • rangeClosed(start, end): 返回从start到end的整数流, 前闭后闭

    Random: 随机数, 有如下方法生成流(不是静态方法)

    • doubles(): 返回无限的随机数流, 值在0-1之间
    • double(long): 返回给定数量的随机数流, 值在0-1之间
    • doubles(start, end): 返回无限的随机数流, 值在start-end之间
    • doubles(long, start, end): 返回给定数量的随机数流, 值在start-end之间
    • ints(), longs() 与doubles函数相同

    等等操作, 请自行尝试

    2.流操作

    Stream: 流的接口, 其中定义了如下对流中间操作的方法:

    • distinct(): 对流中元素去重, 通过equals函数
    • filter(function): 对流中元素进行过滤, 去除经过方法返回false的元素
    • limit(long): 截取流的前long个元素
    • skip(long): 丢弃流中的前long个元素
    • map(function): 将流中的每个元素经过方法进行计算
    • mapToDouble(function): 将流中每个元素经过方法转换成Double
    • mapToInt(function): 将流中每个元素经过方法转换成Int
    • mapToLong(function): 将流中每个元素经过方法转换成Long
    • sorted(): 对流中元素根据自然顺序进行排序
    • sorted(function): 根据方法的比较结果对流中元素进行排序

    当然还有其它操作

    3.获取结果操作

    Stream: 流的接口, 其中定义了如下对流结果操作的方法:

    • forEach(function): 对流中元素进行遍历
    • allMatch(function): 判断流中是否所有元素经过函数均为true
    • anyMatch(function): 判断流中是否存在经过函数返回true的原上诉
    • noneMatch(function): 判断流中是否所以有元素经过函数均为false
    • count(): 统计流中元素的个数
    • max(function): 经过指定函数进行比较,返回最大值
    • min(function): 经过指定函数进行比较,返回最小值
    • toArray(): 将流转换成数组

    当然还有其他操作,更多操作, 请自行尝试

  • 相关阅读:
    shell基础命令
    UITest 单元测试常用的断言
    UIColor 使用起来的坑
    appledoc 使用brew命令安装使用
    appledoc 使用
    Xcode升级 Alcatraz 无法使用
    APP多语言环境支持
    VVDocumenter 使用
    NSDate NSString相互转化
    iOS 常见设计模式
  • 原文地址:https://www.cnblogs.com/hujingnb/p/10181637.html
Copyright © 2011-2022 走看看