java stream api 通过 intstream.range() 和 intstream.rangeclosed() 两个静态方法实现范围流生成。前者生成左闭右开区间,后者生成全闭区间,调用时传入起始值(包含)和结束值(不包含或包含),即可得到对应的数值流。

IntStream.range() 的边界处理逻辑
IntStream.range(startInclusive, endExclusive) 生成的序列严格遵循左闭右开原则,即包含 startInclusive 但不包含 endExclusive。如果起始值大于或等于结束值,该方法会返回一个空的流,不会抛出异常。这种设计使得它在循环替代场景中非常安全,开发者无需手动检查边界条件。

import java.util.stream.IntStream;
public class RangeDemo {
public static void main(String[] args) {
// 生成 [0, 5) 的整数流:0, 1, 2, 3, 4
IntStream.range(0, 5).forEach(System.out::print);
System.out.println();
// 生成空流的情况
IntStream.range(5, 5).forEach(System.out::print);
System.out.println("Empty stream handled.");
}
}
IntStream.rangeClosed() 的全闭区间特性
IntStream.rangeClosed(startInclusive, endInclusive) 与 range 不同,它生成的序列同时包含起始值和结束值。这意味着对于相同的参数,rangeClosed 会比 range 多输出一个元素。当起始值等于结束值时,它将返回仅包含该单个元素的流,这在需要处理单点区间时非常有用。

import java.util.stream.IntStream;
public class RangeClosedDemo {
public static void main(String[] args) {
// 生成 [0, 5] 的整数流:0, 1, 2, 3, 4, 5
IntStream.rangeClosed(0, 5).forEach(System.out::print);
System.out.println();
// 生成单元素流 [3, 3]
IntStream.rangeClosed(3, 3).forEach(System.out::print);
System.out.println("Single element stream.");
}
}
基于 range(0, 3) 的具体结果验证
以 IntStream.range(0, 3) 为例,其实际产生的结果是包含三个整数的流,具体数值为 0、1 和 2。由于是左闭右开,数字 3 被排除在外。在终端操作如 collect() 或 forEach() 触发后,流中的元素将按自然顺序依次处理,最终得到的集合或打印输出中绝不会出现 3。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











