Lambda表达式可实现通用变量转换器,通过复用Function<T,R>接口、封装空安全工具类、结合Stream/Map批量处理及构造器引用映射对象,兼顾简洁性与可控性。

用 Lambda 表达式实现通用变量转换器,核心是把“类型A → 类型B”的逻辑抽象成函数式接口,再通过泛型+函数式参数复用转换行为,避免为每对类型写重复的转换方法。
定义通用转换函数接口
Java 自带的 Function<T, R> 就是理想选择,它天然支持输入一个类型、返回另一个类型。无需额外定义接口,直接复用即可:
- Function<String, Integer> strToInt = s -> Integer.parseInt(s);
- Function<LocalDateTime, String> dtToStr = dt -> dt.format(DateTimeFormatter.ISO_DATE);
- 所有转换逻辑都是一行 Lambda,语义清晰,无模板代码
封装可复用的转换工具类
将常用转换逻辑集中管理,支持空值安全和异常兜底,避免每个地方重复判空或 try-catch:
- 提供静态方法如 safeConvert(Function<T,R> mapper, T source, R defaultValue)
- 内部自动处理 source == null 或 mapper.apply() 抛异常的情况
- 例如:safeConvert(Integer::parseInt, "123", -1) 返回 123;传入 null 或非法字符串则返回 -1
结合 Stream 和 Map 批量转换更省力
当面对集合或键值对时,Lambda 转换器能天然融入函数式流水线:
- List<String> ids = users.stream().map(User::getId).collect(Collectors.toList());
- Map<Long, String> idToName = users.stream().collect(Collectors.toMap(User::getId, User::getName));
- 所有 map、collect 操作里的 lambda 都是轻量级转换器,不需单独命名方法
扩展支持复杂对象映射(轻量级 DTO 转换)
对字段名一致、结构相近的对象,可用 Lambda 组合构造器引用实现零配置转换:
- Function<User, UserDTO> toDTO = u -> new UserDTO(u.getId(), u.getName(), u.getEmail());
- 进一步封装为 BeanConverter<S,D> 工具类,接收 Function<S,D> 构造器 + 字段提取 Lambda,适配简单映射场景
- 比完整 BeanUtils 更可控,比手写 set/get 更简洁,适合微服务间轻量数据透传

















