Java8 Stream 创建流
时间:2022-07-26
本文章向大家介绍Java8 Stream 创建流,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
- 创建流的方法有很多,常见的如:
- 从Collection集合创建
- 根据数值范围创建数值流
- 从一系列值
- 从数组
- 从文件
- 由函数来生成无限流
一、 从Collection集合
Stream<Integer> stream = new HashSet<Integer>()
.stream();
Stream<String> stringStream = new ArrayList<String>()
.stream();
二、 根据数值范围创建数值流
IntStream intStream = IntStream.rangeClosed(1, 100);
三、 从一系列值
- Stream提供了一个静态方法来根据一系列值生成一个流
Stream<Integer> integerStream = Stream.of(1, 2, 3);
Stream<String> stringStream = Stream.of("喜欢", "天文", "的", "pony", "站长");
AppleStream apple = new AppleStream();
Stream<AppleStream> appleStream = Stream.of(apple, apple, apple);
四、 从数组
//重载了支持特定的基本类型流
IntStream intStream = Arrays.stream(new int[]{1, 2, 3});
LongStream longStream = Arrays.stream(new long[]{1L, 2L, 3L});
DoubleStream doubleStream = Arrays.stream(new double[]{1D, 2D, 3D});
Stream<String> stringStream = Arrays.stream(new String[]{"喜欢", "天文", "的", "pony", "站长"});
AppleStream apple = new AppleStream();
Stream<AppleStream> appleStream = Arrays.stream(new AppleStream[]{apple, apple, apple});
五、 从文件
- 准备文件
Stream<String> linesStream = Files.lines(Paths.get("fileStream.txt"));
linesStream.forEach(System.out::println);
- 结果
六、由函数来生成无限流
- Java8提供了
Stream.iterate()
和Stream.generate()
来生成无限流,这两个方法会根据给定的表达式来生成包含无限个数据的流,所以一般结合limit()
来使用。- 迭代:
Stream.iterate(T seed,Function<T, R> apply)
- 生成:
Stream.generate(Supplier<T> s)
- 迭代:
// 给定一个初始值seed,和一个`接收一个入参,并带有返回值的函数`
Stream.iterate(10, x -> x + 5)
.limit(10)
.forEach(System.out::println);
10
15
20
25
30
35
40
45
50
55
Random random = new Random();
// 接收一个 `无入参,有返回值` 的函数
Stream.generate(() -> random.nextInt(100))
.limit(10)
.forEach(System.out::println);
60
56
6
61
7
30
97
64
26
54
欢迎在评论区留下你看文章时的思考,及时说出,有助于加深记忆和理解,还能和像你一样也喜欢这个话题的读者相遇~
- 基于Consul的分布式信号量实现
- 用Python将word文件转换成html
- 1行Python代码实现FTP服务器
- 100行Python代码实现自动抢火车票
- Python交互式数据分析报告框架:Dash
- PyQt5 GUI应用程序工具包入门(2)
- 用Python研究了三千套房子,告诉你究竟是什么抬高了房价?
- 设计模式之装饰模式
- Android网络编程(六)OkHttp3用法全解析
- Android网络编程(五)OkHttp用法全解析
- Android网络编程(一)HTTP协议原理
- Spring Cloud实战小贴士:Zuul统一异常处理(二)
- Android View体系(九)自定义View
- Android网络编程(二)HttpClient与HttpURLConnection
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Spug - 轻量级自动化运维平台
- Callable/Future 使用及原理分析,Future .get()为啥能等待呢?
- 优雅的drop掉mysql库中1TB大表
- 《剑指offer》第19天:股票交易(校对)
- SwiftyUserDefaults-封装系统本地化的框架推荐
- “使用多target来构建大量相似App”,唐巧大神理论验证(附工程代码地址)
- 小结:Swift、OC语言中多target在代码中如何区分
- 点击按钮每次都能实现图片的旋转和切换(swift)
- 多线程之NSOperation小结
- 判断一个坐标点是否在封闭曲线内的方法(swift)
- OC循环方法推荐-块循环遍历(比for循环好用)
- oc工程中oc、swift混编代码打包成静态framework踩坑笔记
- alloc 和 init都做了什么验证。
- 回顾冒泡排序(新增优化代码)
- 计算输入的一句英文语句中单词数