行业资讯 2025年08月6日
0 收藏 0 点赞 656 浏览 1936 个字
摘要 :

文章目录 1.创建IntStream 1.1使用指定值创建 1.2在范围内生成int流 1.3使用迭代创建无限流 1.4使用IntSupplier创建无限流 2.遍历值 3.过滤值 4.将IntStream转换为数……




  • 1.创建IntStream
    • 1.1使用指定值创建
    • 1.2在范围内生成int流
    • 1.3使用迭代创建无限流
    • 1.4使用IntSupplier创建无限流
  • 2.遍历值
  • 3.过滤值
  • 4.将IntStream转换为数组
  • 5.将IntStream转换为List

Java的IntStream类是一种特殊的Stream,主要用来对int数据进行相关的stream操作。它是包含原始int值元素的流,并且支持顺序有序和并行聚合操作。

IntStream是java.util.stream包的一部分,并实现了AutoCloseable和BaseStream接口。

类似的还有LongStream和DoubleStream,这里我们仅以IntStream来进行讲解。

1.创建IntStream

有几种创建IntStream的方法。

1.1使用指定值创建

此函数返回一个顺序有序流,其元素是指定的值。

它有两个重载方法,支持返回单个元素流和多个元素流。

  • of(int t)的IntStream – 返回包含单个指定元素的流。
  • of(int… values)的IntStream – 返回包含所有指定元素的流。
IntStream.of(10);         //10
IntStream.of(1, 2, 3);     //1,2,3

1.2在范围内生成int流

由range()方法生成的IntStream是顺序有序的int值流,它是for循环中递增的int值的等效序列,并且值默认递增1。此类支持两种方法。

  • range(int start, int end) – 返回从start(含)到end(不含)的顺序有序int流,步长为1。
  • rangeClosed(int start, int end) – 返回从start(含)到end(含)的顺序有序int流,步长为1。
IntStream.range(1, 5);      //1,2,3,4
IntStream.rangeClosed(1, 5);      //1,2,3,4,5

1.3使用迭代创建无限流

iterator()函数对于创建无限流非常有用。此外,我们可以使用此方法产生以任何值递增的流。

以下示例产生前10个从0开始的偶数(即以2递增)。

IntStream.iterate(0, i -> i + 2).limit(10);
//0,2,4,6,8,10,12,14,16,18

1.4使用IntSupplier创建无限流

generate()方法看起来很像iterator(),但是不是通过递增前一个值来计算int值。相反,提供了一个IntSupplier,这是一个函数式接口,用于生成无限的无序int流。

以下示例创建包含10个随机数的流,然后在控制台上打印它们。

IntStream stream = IntStream
    .generate(() -> { return (int)(Math.random() * 10000); });
stream.limit(10).forEach(System.out::println);

2.遍历值

要循环遍历元素,IntStream支持forEach()操作。

IntStream.rangeClosed(0, 4)
            .forEach( System.out::println );

3.过滤值

我们可以对int值流产生的int值进行过滤,并在另一个函数中使用它们或收集它们以进行进一步处理。例如,我们可以迭代int值并过滤/收集某个范围内的所有素数。

IntStream stream = IntStream.range(1, 100);
List<Integer> primes = stream.filter(ThisClass::isPrime)
            .boxed()
            .collect(Collectors.toList());
public static boolean isPrime(int i)
{
    IntPredicate isDivisible = index -> i % index == 0;
    return i > 1 && IntStream.range(2, i).noneMatch(isDivisible);
}

4.将IntStream转换为数组

使用IntStream.toArray()方法将IntStream流转换为int数组。

int[] intArray = IntStream.of(1, 2, 3, 4, 5).toArray();

5.将IntStream转换为List

Java中的集合不能直接存储原始值,只能存储实例/对象。

使用IntStream的boxed()方法,我们可以获得一个包装对象的流,该流可以使用Collectors方法进行收集。

List<Integer> list = IntStream.of(1,2,3,4,5)
            .boxed()
            .collect(Collectors.toList());

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/9563.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

988
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

465
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

348
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

456
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

517
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

832
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号