intsupplier 是 java 8 提供的函数式接口,用于按需返回原始 int 值,仅含 getasint() 方法,避免装箱开销;区别于 supplier,适用于高性能数值场景如 stream 操作和延迟初始化。

IntSupplier 是 Java 8 引入的函数式接口,专门用于**按需提供一个 int 值**,不接收任何参数,只通过 getAsInt() 方法返回原始 int 类型。
调用 getAsInt() 获取 int 值
这是唯一且必须实现的方法。只要持有 IntSupplier 实例,直接调用它即可拿到 int:
- 不是通过
get()(那是Supplier<t></t>的方法) - 也不是通过泛型类型转换——它天生就面向原始
int,避免装箱开销 - 例如:
int value = myIntSupplier.getAsInt();
常见创建方式与使用示例
你可以用 Lambda、方法引用或匿名内部类构造 IntSupplier:
- Lambda:
IntSupplier randomInt = () -> new Random().nextInt(100); - 固定值:
IntSupplier always42 = () -> 42; - 方法引用(静态):
IntSupplier currentNano = System::nanoTime;(注意返回值是long,需适配)→ 实际中要确保返回int,如() -> (int)System.nanoTime()
和 Supplier 的关键区别
别混淆两者:
-
IntSupplier→ 返回int(原始类型),无装箱,性能好,专用于数值场景 -
Supplier<integer></integer>→ 返回Integer(对象),每次调用可能触发自动装箱,有额外开销 - 如果你需要的是原始
int,尤其在循环、Stream 的mapToInt或高性能计算中,优先选IntSupplier
典型应用场景
它常出现在需要延迟生成或重复获取 int 值的地方:
- 初始化默认值:
int x = config.getInt("timeout", () -> 30000);(仅当配置缺失时才执行) - Stream 操作:
IntStream.generate(counter).limit(5).forEach(System.out::println);(counter是IntSupplier) - 测试中模拟动态返回值:比如每次调用返回递增的序号
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











