ToIntFunction 是 Java 8 的函数式接口,用于将对象映射为 int 值,核心方法 applyAsInt(T) 接收参数返回 int;支持 Lambda 表达式(如 user -> user.getAge())和方法引用(User::getAge),但要求 getter 返回 int 类型;可处理 null 或字符串等场景,并常与 Stream.mapToInt 配合进行聚合操作。

ToIntFunction 是 Java 8 引入的函数式接口,用于将任意类型对象映射为 int 值。它的核心方法 applyAsInt(T value) 接收一个参数并返回一个 int,常用于提取对象中某个属性(如 id、age、score 等)并转为整数。
用 Lambda 表达式直接提取属性
最常见也最直观的方式是用 Lambda 写明取值逻辑:
- 假设有一个
User类,含private int age;和public int getAge() { return age; } - 可这样创建
ToIntFunction<User>:
调用时:int age = ageExtractor.applyAsInt(user);
用方法引用简化写法
当 getter 方法签名匹配(即接收 1 个对象、返回 int),可用方法引用替代 Lambda,更简洁清晰:
立即学习“Java免费学习笔记(深入)”;
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
注意:该方式要求 getAge() 必须返回 int(不能是 Integer,否则编译不通过;若为包装类型,需显式拆箱或改用 Function<User, Integer> 后调用 intValue())。
处理可能为 null 或需要转换的属性
若属性是 String(如 "123")、Integer 或可能为 null,需在 applyAsInt 中做安全转换:
- 字符串转 int(带空值检查):
user -> user.getIdStr() == null ? 0 : Integer.parseInt(user.getIdStr()) - Integer 属性(避免 NPE):
user -> Objects.requireNonNullElse(user.getScore(), 0) - 复杂计算(如年龄 = 当前年 - 出生年):
user -> LocalDate.now().getYear() - user.getBirthYear()
配合 Stream 使用提取后聚合
实际中常与 Stream 配合,比如求平均年龄、统计人数等:
double avgAge = users.stream().mapToInt(User::getAge).average().orElse(0.0);
int sum = users.stream().mapToInt(User::getAge).sum();
这里 mapToInt 的参数就是 ToIntFunction<User>,底层自动适配 User::getAge。

















