一、基础创建方式
javaCopy Code
// 1. range范围生成(不包含结束值) IntStream.range(1, 5).forEach(System.out::print); // 输出1234 // 2. rangeClosed范围生成(包含结束值) IntStream.rangeClosed(1, 5).forEach(System.out::print); // 输出12345 // 3. 直接生成值 IntStream.of(10, 20, 30).forEach(System.out::println);
二、典型应用场景
案例1:数组索引遍历
javaCopy Code
String[] fruits = {"Apple", "Banana", "Cherry"}; IntStream.range(0, fruits.length) .forEach(i -> System.out.println(i + ":" + fruits[i]));
案例2:数学计算
javaCopy Code
// 计算1-100偶数和 int sum = IntStream.rangeClosed(1, 100) .filter(n -> n % 2 == 0) .sum(); System.out.println(sum); // 输出2550
案例3:生成随机数流
javaCopy Code
new Random().ints(5, 0, 100) // 5个0-100随机数 .sorted() .forEach(System.out::println);
三、高级操作
1. 装箱转换
javaCopy Code
List<Integer> list = IntStream.range(1, 4) .boxed() // 转为Stream<Integer> .collect(Collectors.toList());
2. 并行处理
javaCopy Code
IntStream.range(1, 10) .parallel() // 并行流 .map(n -> n * 2) .forEachOrdered(System.out::println);
3. 统计汇总
javaCopy Code
IntSummaryStatistics stats = IntStream.of(5, 8, 3, 2) .summaryStatistics(); System.out.println("平均值: " + stats.getAverage());
四、特性说明
- 惰性求值:中间操作不会立即执行
- 不可复用:流消费后需重新创建
- 性能优势:避免自动装箱开销
- 链式调用:支持filter/map/reduce等组合操作
五、完整示例:质数筛选
javaCopy Code
IntStream.rangeClosed(2, 100) .filter(n -> IntStream.rangeClosed(2, (int)Math.sqrt(n)) .noneMatch(i -> n % i == 0)) .forEach(p -> System.out.print(p + " ")); // 输出2-100之间的质数