java8特性——Stream API

什么是Stream?

   Stream是一些数据上的抽象视图。

  举例来说,Stream可以是列表、文件中的每行数据,或者其他任意元素的序列的一个视图。Stream API提供了可以连续执行,或者并行执行的操作集合。

  开发者需要记住的是Stream是一个高层的抽象,而不是一个数据结构。Stream不会存储你的数据。 Stream本身是懒惰的,只有使用到它们时才会开始计算。这使我们能够产生无数的数据流。

  在Java8中,你能够像下面一样编写一个Stream来产生无数的唯一标识码。

public static void main(String[] args) {
    Stream<String> uuidStream = Stream.generate(() -> UUID.randomUUID().toString());
}

  在Stream的接口中,有很多像of、generate和iterate一样的静态工厂方法,它们可以用来创建Stream的实例。上面展示的generate方法以Supplier为参数。Supplier是一个函数式接口,用来描述一个不需要参数并返回一个值的函数。我们传递给generate方法一个供应者,那么当调用的时候,就能产生一个唯一标识码。
  

怎么用Stream?

  一个Stream表面上与一个集合很类似,允许你改变和获取数据,但实际上却有很大区别:

  1、Stream自己不会存储元素。元素可能被存储在底层的集合中,或者根据需要产生出来。

  2、Stream操作符不会改变源对象。相反,他们返回一个持有新结果的Stream。

  3、Stream操作符可能是延迟执行的。意思是它们会等到需要结果的时候才执行。

  Stream遵循“做什么,而不是怎么去做”的原则。只需要描述需要做什么,而不用考虑程序是怎样实现的。

  Stream很像Iterator,单向,只能遍历一遍。但是Stream可以只通过一行代码就实现多线程的并行计算。

  当使用Stream时,会有三个阶段:

  1、创建一个Stream。

  2、在一个或多个步骤中,将初始Stream转化到另一个Stream的中间操作。

  3、使用一个终止操作来产生一个结果。该操作会强制他之前的延迟操作立即执行。在这之后,该Stream就不会在被使用了。

  
  

Stream的操作

  中间操作包括:map (mapToInt, flatMap 等)、 filter、distinct、sorted、peek、limit、skip、parallel、sequential、unordered。

  终止操作包括:forEach、forEachOrdered、toArray、reduce、collect、min、max、count、anyMatch、allMatch、noneMatch、findFirst、findAny、iterator。

  
  
  
  

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值