此外 , 我们还有以下生成流的手段
- 随机数流
int
基本类型的区间范围方法generate()
方法iterate()
方法- 流生成器
Arrays.stream()
将数组转换为流- 正则表达式
随机数流
Random
类已经得到了增强 , 现在有一组可以生成流的方法 。ints()
longs()
doubles()
boxed()
Random
类获取三种基本类型的流 , 或者在其后加上boxed()
来获取它们的包装类的流 。实际上 , Random
类生成的这些数值 , 还有别的价值 , 比如通过随机数来获取某个列表中的随机下表对应值 , 以此来获取随机的对象 。int区间范围方法
IntStraem
类提供了新的range()
方法 , 可以生成一个流 , 它代表一个由int
值组成的序列 , 对于IntStream.range(a, b)
来说 , 这个流中的数据是[a, b)
区间的所有整数 。利用这个方法 , 我们可以通过流很好的代替某些循环了 , 比如:
public class Repeat{public static repeat(int n, Runnable action){IntStream.range(0, n).forEach(i -> action.run());}}
这样一个方法就是把我们的action
方法执行n
次 , 可以很好的替代普通的循环 。generate() 方法
Stream.generate()
方法可以接受一个方法作为参数 , 该方法必须要返回一个实例或基本类型 。总之 , 无论你给出的方法返回了什么 , generate()
方法会无限的根据该方法产生元素并塞入流中 , 如果你不希望它无限产生 , 那么你应该使用limit()
来限制次数AtomicInteger i = new AtomicInteger();Stream.generate(() -> i.getAndIncrement()).limit(20).forEach(System.out::println);// 输出为从0到19
iterate()方法顾名思义 , 这个方法通过迭代不断产生元素 , 它可以将第一个参数作为输入赋给第二个参数 (也就是那个方法) , 然后该方法会产生一个输出 , 随后该输出又会作为输入再度交给方法来产生下一个输出 , 由此不断迭代 。一个典型的例子是由此产生一个斐波那契数列的方法 , 如下所示 。
int x = 0;public Stream<Integer> numbers(){return Stream.iterate(1, o ->{int result = o + x;x = o;return result;});}public static void main(String[] args) {test2 t = new test2();t.numbers().limit(20).forEach(System.out::println);}
流生成器流生成器方法
Stream.builder()
可以返回Stream.Builder<T>
类 , 你可以自定义这个返回的类的泛型以便适配需求 , 随后 , 你可以将它当作一个类似StringBuilder
一样的存在使用 , 通过add()
等方法向里面塞入元素 , 并最终通过build()
方法来返回一个流 。Stream.Builder<String> builder = Stream.builder();builder.add("a").add("b").add("c").build().map(x -> x.toUpperCase()).forEach(System.out::print);// 输出ABC
Arrays流方法Arrays.stream()
静态方法可以将一个数组转化为流 , 非常简单易理解int[] chars = {1,2,3,4,5};Arrays.stream(chars).forEach(System.out::print);// 输出12345
正则表达式Java 8在
java.util.regex.Pattern
经验总结扩展阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 2022,一个Java程序猿的外设配置
- 2022,一个Java程序猿的装机配置
- Java 多线程写zip文件遇到的错误 write beyond end of stream!
- 1 JAVA语言学习-面向对象
- 函谷关在哪里
- Java 19 新功能介绍
- Java线程未捕获异常处理 UncaughtExceptionHandler
- 死磕面试系列,Java到底是值传递还是引用传递?
- 【Java复健指南09】项目练习全解--房屋出租系统
- Java集合精选常见面试题