首页 > 编程语言 > 详细

Java8-无限流

时间:2020-11-27 22:16:20      阅读:43      评论:0      收藏:0      [点我收藏+]

使用无限流的前提条件

??流是惰性的,分为中间操作和终止操作,在执行终止操作之前,流的遍历不会开始,基于这一特性,才可以使用无限流;
??使用无限流,需要正确的做限制(limit),截断流。

无限流的两种生成方式

  1. iterate():接收一个初始元素seed,生成从seed到f的迭代流
/**
 * @param seed 初始元素
 * @param f UnaryOperator,函数式接口,接收T类型参数,调用apply后返回T本身,应用于上一个元素以产生新元素
 */
public static<T> Stream<T> iterate(final T seed, final UnaryOperator<T> f) {}

??eg:创建一个从0开始,每次加2的无限流,并限制收集前十个元素

List<Integer> list = Stream.iterate(0, c -> c + 2)
                .limit(10)
                .collect(Collectors.toList());
//output:[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

??eg:斐波那契数列,从[0, 1]开始,下一个元素是前两个元素之和,并限制收集前十个数组中的首元素

List<Integer> list = Stream.iterate(new Integer[]{0, 1}, c -> new Integer[]{c[1], c[0] + c[1]})
                .map(c -> c[0])
                .limit(10)
                .collect(Collectors.toList());
//output:[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
  1. generate():接收一个Supplier函数式接口作为参数,生成迭代流
/**
 * @param s Supplier,函数式接口,生产者,返回T
 */
public static<T> Stream<T> generate(Supplier<T> s) {}

??eg:生成十个随机数

List<Double> list = Stream.generate(Math::random)
                .limit(10)
                .collect(Collectors.toList());

无限流-补全折线图日期数据demo

Java8-无限流

原文:https://www.cnblogs.com/milete/p/14050460.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!