几种编程语言(例如Ruby或Python等)提供yield命令。 在内存消耗方面,Yield提供了一种有效的方式,可以通过按需生成值来创建一系列值。 有关Python产量的更多信息。

让我们考虑一个需要大量安全随机整数的类或方法。 经典方法是创建此类整数的数组或集合。 与这种方法相比,良率提供了两个主要优点:

  • 产量不需要事先知道序列的长度。
  • yield不需要将所有值存储在内存中。

幸运的是,得益于Stream API ,yield功能可以在Java 8中使用:

import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.Date;
import java.util.function.Supplier;
import java.util.stream.Stream;public class Yield {private static final Integer RANDOM_INTS = 10;public static void main(String[] args) {try (Stream randomInt = generateRandomIntStream()){Object[] randomInts = randomInt.limit(RANDOM_INTS).sorted().toArray();for (int i = 0; i < randomInts.length;i++)System.out.println(randomInts[i]);} catch (NoSuchAlgorithmException e) {e.printStackTrace();}}private static Stream generateRandomIntStream()throws NoSuchAlgorithmException{return Stream.generate(new Supplier() {final SecureRandom random = SecureRandom.getInstance("SHA1PRNG");boolean init = false;int numGenerated = 0;@Overridepublic Integer get() {if (!init){random.setSeed(new Date().getTime());init = true;System.out.println("Seeding");}final int nextInt = random.nextInt();System.out.println("Generated random "+ numGenerated+++ ": " + nextInt);return nextInt;}});}}

以下是执行提供的代码段后的输出:

Seeding
Generated random 0: -896358073
Generated random 1: -1268521873
Generated random 2: 9627917
Generated random 3: -2106415441
Generated random 4: 935583477
Generated random 5: -1132421439
Generated random 6: -1324474601
Generated random 7: -1768257192
Generated random 8: -566921081
Generated random 9: 425501046
-2106415441
-1768257192
-1324474601
-1268521873
-1132421439
-896358073
-566921081
9627917
425501046
935583477

很容易看出, 供应商仅被实例化。 当然,我们可以利用所有Stream API功能,例如limit()sorted()。

randomInt.limit(RANDOM_INTS).sorted()。toArray()触发RANDOM_INTS值的生成,然后将其排序并存储为数组。

翻译自: https://www.javacodegeeks.com/2014/08/java-yield-like-using-stream-api.html

使用Stream API的类Java产量相关推荐

  1. Java SE 9:Stream API的改进

    发表简要目录: (Post Brief Table of Content:) Introduction介绍 Java SE 8: Stream API BasicsJava SE 8:Stream A ...

  2. 使用 Stream API 高逼格 优化 Java 代码!

    作者 | 何甜甜在吗 来源 | https://juejin.cn/post/6844903945005957127 使用Stream API优化代码 Java8的新特性主要是Lambda表达式和流, ...

  3. java遍历栈_Java中使用StackWalker和Stream API进行堆栈遍历

    1.Java 9以前堆栈遍历到目前为止,官方解决方案是获取当前线程并调用其getStackTrace()方法: StackTraceElement[] stackTraceElements = Thr ...

  4. Java 8 Stream API详解--转

    原文地址:http://blog.csdn.net/chszs/article/details/47038607 Java 8 Stream API详解 一.Stream API介绍 Java 8引入 ...

  5. 学习笔记之-java8的新特性-函数式接口,lambda表达式,方法引用,Stream API,Optional类

    1.Lambda表达式 用匿名内部类的方法去创建多线程1.new Thread2.参数传递new Runnable3.重写run方法4.在run方法中去设置线程任务5.调用start问题:我们最终目标 ...

  6. Java 8 新特性之Stream API

    1. 概述 1.1 简介 Java 8 中有两大最为重要的改革,第一个是 Lambda 表达式,另外一个则是 Stream API(java.util.stream.*). Stream 是 Java ...

  7. java peek函数_Java 8 Stream Api 中的 peek 操作

    1. 前言 我在 Java 8 Stream API中的 map 和flatMap 中讲述了Java8 Stream API中 map 操作和 flatMap 操作的区别.然后有小伙伴告诉我 peek ...

  8. Java 8 Stream Api 中的 peek、map、foreach区别

    #1. 前言 我在Java8 Stream中讲述了 Java 8 Stream API 的一些内容.今天再看一下peek.map.foreach区别. 2. peek peek 操作接收的是一个 Co ...

  9. Java 8 Stream API详解

    Java 8 Stream API详解 一.Stream API介绍 Java 8引入了全新的Stream API,此Stream与Java I/O包里的InputStream和OutputStrea ...

最新文章

  1. SELinux与强制访问控制系统应用
  2. 玩转 JavaScript 面试:何为函数式编程?
  3. [CLR via C#]5.3 值类型的装箱和拆箱
  4. OpenStack Heat 如何来实现和支持编排
  5. Ecshop后台流量分析--地区分布的地名全是乱码
  6. Short-Session的推荐如何做?
  7. SpringBoot之配置自定义新建文件
  8. ActiveMQ –经纪人网络解释–第5部分
  9. dd , /dev/zero和/dev/null
  10. innobackup备份恢复实操步骤--gtid复制(1)(1)
  11. java工作笔记020---Java中的关键字 transient
  12. android:ellipsize省略文字用法(转载)
  13. python cnn代码详解图解_基于TensorFlow的CNN实现Mnist手写数字识别
  14. java excel 列,使用Java读取Excel工作表的单列
  15. 装ubuntu_系统安装_win10下安装Ubuntu后,启动时无win10选项的解决办法。
  16. matlab等高线二维加数字,matlab绘制二维等高线
  17. 福大软工1816 · 第四次作业 - 团队展示
  18. 建广数科(文思海辉)招聘
  19. android 游戏音效格式,Android基础 - Android Studio 添加游戏音效
  20. Mysql学习日记:L13-distinct关键字

热门文章

  1. spark submit参数及调优
  2. html点击弹出iframe,JavaScript:关于跨iframe弹窗
  3. eclipse maven 项目发布到tomcat 报错 Failed to scan JAR [file:/C:/xxxxx.jar] from WEB-INF/lib
  4. java中的equals方法+hashCode方法
  5. java继承中的 equals + hashCode+toString
  6. 如何写登录的记住账号
  7. apache ignite_使用Apache Storm和Apache Ignite进行复杂事件处理(CEP)
  8. 本地运行flowable_在CockroachDB上运行Flowable
  9. javafx 内存占用_JavaFX:TouchGesture内存泄漏?
  10. java处理注释_Java注释处理器