Stream.iterate方法与UnaryOperator
前提:本人在翻看《Java核心技术II》的时候在p17的时候发现一段代码不是很明白。不知道为什么就输出了1,2,3,4,5,6,7,8,9,10,...也不知道n-n.add(BigInteger.One)的功用是什么。
代码如下:
Stream<BigInteger> integers = Stream.iterate(BigInteger.ONE, n->n.add(BigInteger.ONE));
show("integers",integers);
首先,BigInteger.ONE是表示BigInteger.ONE的常数。输出一下得到的是1。
System.out.println(BigInteger.ONE);
遂去翻看Stream.iterate方法的实现。该方法的作用是
- 返回有序无限连续
Stream由函数的迭代应用产生f至初始元素seed,产生Stream包括seed,f(seed),f(f(seed)),等第一元件(位置
0在)Stream将是提供seed。 对于n > 0,位置n的元素将是将函数f应用于位置n - 1的元素的n - 1。简单的说就是指定一个常量seed,产生从seed到常量f(由UnaryOperator返回的值得到)的流。这是一个迭代的过程。
public static<T> Stream<T> iterate(final T seed, final UnaryOperator<T> f) {
......
return StreamSupport.stream(Spliterators.spliteratorUnknownSize(
iterator,
Spliterator.ORDERED | Spliterator.IMMUTABLE), false);
}
发现iterate方法的第二个参数类型是UnaryOperator类型。找了一下UnaryOperator源代码。 UnaryOperator作用就是,返回且始终返回其输入参数的一元运算符。
public interface UnaryOperator<T> extends Function<T, T> {
/**
* Returns a unary operator that always returns its input argument.
*
* @param <T> the type of the input and output of the operator
* @return a unary operator that always returns its input argument
*/
static <T> UnaryOperator<T> identity() {
return t -> t;
}
}
所以n->n.add(BigInteger.ONE)的作用就是不断地生成比n大1的数,即代码同:
n = n.add(BigInteger.ONE);
所以Stream.iterate(BigInteger.ONE, n->n.add(BigInteger.ONE));得到的是从1依次增1的BigInteger类型的流。
Stream.iterate方法与UnaryOperator的更多相关文章
- Hibernate-list()与iterate()方法的区别
对于list方法而言,实际上Hibernate是通过一条Select SQL获取所有的记录.并将其读出,填入到POJO中返回.而iterate 方法,则是首先通过一条Select SQL 获取所有符合 ...
- Stream和方法引用
1.Stream流 1.for循环带来的弊端 在jdk8中,lambda专注于做什么,而不是怎么做 for循环的语法就是怎么做 for循环的循环体才是做什么 遍历是指每一个元素逐一进行处理,而并不是从 ...
- 面试:Stream#foreach方法摸底三问,你都了解吗
JAVA8 新增了 Stream API,而在 Stream API 中又为程序员提供了一个遍历集合的 foreach 方法:java.util.stream.Stream#forEach. 那你对这 ...
- day37 04-Hibernate二级缓存:list和iterate方法比较
get()和load()方法既可以向一级缓存区放数据,也可以向二级缓存区放数据.这是查询一个的情况.要是查询所有呢?注意, // 查询所有.Query接口的list()方法. // list()方法会 ...
- Java8 Stream流方法
流是Java API的新成员,它允许以声明性方式处理数据集合(通过查询语句来表达,而不是临时编写一个实现).就现在来说,可以把它们看成遍历数据集的高级迭代器.此外,流还可以透明地并行处理,无需写任何多 ...
- C#语言中的XmlSerializer类的XmlSerializer.Serialize(Stream,Object)方法举例详解
在对象和 XML 文档之间进行序列化和反序列化操作. XmlSerializer 使您能够控制如何将对象编码为 XML. 命名空间: System.Xml.Serialization程序集: S ...
- [五]java函数式编程归约reduce概念原理 stream reduce方法详解 reduce三个参数的reduce方法如何使用
reduce-归约 看下词典翻译: 好的命名是自解释的 reduce的方法取得就是其中归纳的含义 java8 流相关的操作中,我们把它理解 "累加器",之所以加引号是因为他并不仅仅 ...
- 分享知识-快乐自己:Hibernate中的 quert.list() 与 quert.iterate() 方法区别
区别如下: quert.list() : 1):每次都是通过一条语句直接操作数据库取出所有的数据返回(并且将对象存入hibernate缓存中): 2):不会从一二级缓存中查询数据: 3):之执行一条S ...
- Stream流方法引用
一.对象存在,方法也存在,双冒号引用 1.方法引用的概念: 使用实例: 1.1先定义i一个函数式接口: 1.2定义一个入参参数列表有函数式接口的方法: 1.3调用这个入参有函数式接口的方法: lamb ...
随机推荐
- 下载android sdk
- Hibernate的session.createSQLQuery的几种查询方式
当我们用HQL进行子查询的时候,如select * from Tree where pid in (select id from Tree,此时HIBERANTE就会报错,说什么*号错误之类的.但如果 ...
- 【220】◀▶ IDL 数组操作函数说明
参考:Array Creation Routines —— 创建数组函数参考:Array Manipulation Routines —— 操作数组函数 01 MAX 最大值. 02 MIN ...
- 通过url在两个页面之间传值
今天开发遇到一个需要通过url传值才能解决的问题,就查了一下资料 一下是整理的结果: 假如需要把a页面的值传到b页面 a页面代码 <script type="text/javascri ...
- CF-831A
A. Unimodal Array time limit per test 1 second memory limit per test 256 megabytes input standard in ...
- HDOJ-2047
阿牛的EOF牛肉串 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total S ...
- 3.7-3.10 Hive 企业使用优化1
一.Fetch Task 在执行hive代码的时候,一条简单的命令大部分都会转换成为mr代码在后台执行, 但是有时候我们仅仅只是想获取一部分数据而已,仅仅是获取数据,还需要转化成为mr去执行吗? 那个 ...
- eclipse编译Jmeter源码
1.在apache官网下载源码和安装包 http://jmeter.apache.org/ 2. 解压 解压安装包和源码包, 将安装包apache-jmeter-3.3 里lib ...
- Ipython使用总结1
安装了Anaconda就会发现安装了很多组件.也就省去了安装包时候的依赖问题 https://www.continuum.io/downloads 2 Ipython基础 (1)启动: win+R 启 ...
- CCF 201512-4 送货 (并查集+DFS,欧拉路)
问题描述 为了增加公司收入,F公司新开设了物流业务.由于F公司在业界的良好口碑,物流业务一开通即受到了消费者的欢迎,物流业务马上遍及了城市的每条街道.然而,F公司现在只安排了小明一个人负责所有街道的服 ...