Java Stream流

打印 上一主题 下一主题

主题 963|帖子 963|积分 2889

Stream流

Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处置惩罚数据。
结合Lambda表达式来完成某种功能的实现
Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 聚集运算和表达的高阶抽象。
Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。
这种风格将要处置惩罚的元素聚集看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处置惩罚, 比如筛选, 排序,聚合等。
元素流在管道中颠末中间操纵(intermediate operation)的处置惩罚,最后由终极操纵(terminal operation)得到前面处置惩罚的效果。
  1. +--------------------+       +------+   +------+   +---+   +-------+
  2. | stream of elements +-----> |filter+-> |sorted+-> |map+-> |collect|
  3. +--------------------+       +------+   +------+   +---+   +-------+
复制代码
以上流程转化为Java代码为:
  1. List<Integer> transactionsIds =
  2. widgets.stream()
  3.              .filter(b -> b.getColor() == RED)
  4.              .sorted((x,y) -> x.getWeight() - y.getWeight())
  5.              .mapToInt(Widget::getWeight)
  6.              .sum();
复制代码
什么是Stream?

Stream(流)是一个来自数据源的元素队列并支持聚合操纵

  • 元素是特定范例的对象,形成一个队列。 Java中的Stream并不会存储元素,而是按需盘算。
  • 数据源 流的来源。 可以是聚集,数组,I/O channel, 产生器generator 等。
  • 聚合操纵 类似SQL语句一样的操纵, 比如filter, map, reduce, find, match, sorted等。
和从前的Collection操纵不同, Stream操纵还有两个基础的特征:

  • Pipelining: 中间操纵都会返回流对象本身。 如很多个操纵可以串联成一个管道, 如同流式风格(fluent style)。 如许做可以对操纵进行优化, 比如延迟实验(laziness)和短路( short-circuiting)。
  • 内部迭代: 从前对聚集遍历都是通过Iterator或者For-Each的方式, 显式的在聚集外部进行迭代, 这叫做外部迭代。 Stream提供了内部迭代的方式, 通过访问者模式(Visitor)实现。
生成流

在 Java 8 中, 聚集接口有两个方法来生成流:

  • stream() − 为聚集创建串行流。(单线程)
  • parallelStream()− 为聚集创建并行流。(多线程)
举个例子
  1. List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
  2. List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());
复制代码

方法

Stream()

生成流
forEach()


void forEach(Consumer

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

勿忘初心做自己

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表