使用 java.util.random 类的 ints() 方法可以直接生成随机整数流。调用该实例的 ints(long streamsize) 方法并传入期望的元素数量,即可获得一个无限或有限长度的 intstream。该方法返回的是 intstream 对象,支持后续的过滤、映射和收集操作。

如何指定随机整数的取值范围?
通过调用 ints(int randomNumberOrigin, int randomNumberBound) 方法可以限定随机数的区间。该方法接受两个参数,第一个参数是随机数的最小值(包含),第二个参数是随机数的最大值(不包含)。生成的流中的每个整数都满足 origin 的条件。如果不指定大小,它将生成无限流,需要配合 <code>limit() 使用。

import java.util.Random;
import java.util.stream.IntStream;
public class RandomStreamDemo {
public static void main(String[] args) {
Random random = new Random();
// 生成5个 [0, 100) 之间的随机整数
IntStream stream = random.ints(5, 0, 100);
// 打印结果
stream.forEach(System.out::println);
}
}运行上述代码将输出5个介于0到99之间的随机整数。每次运行结果不同,但都在指定范围内。如果希望获取特定数量的随机数,必须使用带大小的重载方法或在无限流后链式调用 limit()。
立即学习“Java免费学习笔记(深入)”;
如何结合其他Stream操作处理随机数?
生成的随机整数流完全兼容 Java Stream API 的其他操作,如 filter、map 和 collect。例如,可以过滤出偶数,或者将随机数转换为字符串列表。这种组合能力使得随机数据生成与数据处理可以在一条语句中完成,无需显式循环。

import java.util.Random;
import java.util.stream.IntStream;
import java.util.List;
import java.util.stream.Collectors;
public class AdvancedRandomStream {
public static void main(String[] args) {
Random random = new Random();
// 生成10个 [1, 100] 范围内的随机数,过滤出大于50的,并转为List
List<Integer> result = random.ints(10, 1, 101)
.filter(n -> n > 50)
.boxed()
.collect(Collectors.toList());
System.out.println(result);
}
}这段代码首先生成10个1到100之间的随机整数,然后过滤掉小于等于50的数,最后收集到一个列表中。注意 IntStream 是基本类型流,若要收集为 List<integer></integer>,需先调用 boxed() 装箱。最终输出的列表长度可能小于10,取决于过滤条件。
基于程序中某个输入、条件或结果的具体问题
当使用 ints() 生成无限流而未调用 limit() 或终端操作时,程序会陷入无限执行状态。这是因为 ints() 默认返回的是惰性求值的无限流。只有在遇到终端操作且未限制流大小时,才会持续产生随机数直到内存溢出或手动中断。因此,在实际开发中,务必确保流的大小是有限的,或者在中间操作中明确限制元素数量。


















