怎么做万网网站,网站ping值,wordpress 分类目录里,集团公司网站源码下载引言 Java 8 版本新增的Stream#xff0c;配合同版本出现的Lambda #xff0c;给我们操作集合#xff08;Collection#xff09;提供了极大的 便利。Stream流是JDK8新增的成员#xff0c;允许以声明性方式处理数据集合#xff0c;可以把Stream流看作是遍历数据集 合的一个…引言 Java 8 版本新增的Stream配合同版本出现的Lambda 给我们操作集合Collection提供了极大的 便利。Stream流是JDK8新增的成员允许以声明性方式处理数据集合可以把Stream流看作是遍历数据集 合的一个高级迭代器。Stream 是 Java8 中处理集合的关键抽象概念它可以指定你希望对集合进行的操 作可以执行非常复杂的查找/筛选/过滤、排序、聚合和映射数据等操作。使用Stream API 对集合数据进行 操作就类似于使用 SQL 执行的数据库查询。也可以使用 Stream API 来并行执行操作。 简而言之Stream API 提供了一种高效且易于使用的处理数据的方式。
一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)实现。 Stream可以由数组或集合创建对流的操作分为两种
1中间操作每次返回一个新的流可以有多个
2终端操作每个流只能进行一次终端操作终端操作结束后流无法再次使用。终端操作会产生一个新 的集合或值。
特性
不是数据结构不会保存数据。不会修改原来的数据源它会将操作后的数据保存到另外一个对象中。保留意见毕竟peek方法可 以修改流中元素惰性求值流在中间处理过程中只是对操作进行了记录并不会立即执行需要等到执行终止操作 的时候才会进行实际的计算
二Stream流的具体操作
2.1Stream的创建
示例代码 //List集合ListString list Arrays.asList(a, b, c);// 创建一个顺序流串行流StreamString stream list.stream();// 创建一个并行流用于多线程StreamString parallelStream list.parallelStream();//使用数组创建int[] array{1,3,5,6,8};IntStream stream Arrays.stream(array);
2.2Stream流的常用方法of()、generate()iterate()
2.2.1of方法 为给定元素创建顺序流:
示例代码 StreamInteger isStream.of(5,4,8,66,2,3);is.forEach(System.out::println);
输出结果 2.2.2generate()方法 返回一个无限连续的无序流其中每个元素由提供的供应商(Supplier)生成。generate方法用于生成常量流和随机元素流。
示例代码 StreamDouble isStream.generate(Math::random).limit(4);is.forEach(System.out::println);
输出结果 2.2.3iterate方法 可以用来生成一个包含无限个元素的流。iterate的两个参数第一个参数是新流中的初始元素然后使用该数据做第二个参数也就是UnaryOperator函数的入参去计算第二元素然后把新计算得到的第二个元素作为入参继续计算第三个元素以此循环可以制造无限个元素。
示例代码 StreamInteger isStream.iterate(0,(e)-e3).limit(5);is.forEach(System.out::println);
输出结果 2.3Stream流的使用 示例代码 //1-100以内素数的和int suIntStream.rangeClosed(1,100).filter(e-{for (int i 2; i e; i) {if (e%i0){return false;}}return true;}).sum();System.out.println(su);
输出结果