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></user>:
调用时:int age = ageExtractor.applyAsInt(user);
用方法引用简化写法
当 getter 方法签名匹配(即接收 1 个对象、返回 int),可用方法引用替代 Lambda,更简洁清晰:
注意:该方式要求 getAge() 必须返回 int(不能是 Integer,否则编译不通过;若为包装类型,需显式拆箱或改用 Function<user integer></user> 后调用 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>,底层自动适配 User::getAge。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











