You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写方法接收A类型对象列表与映射器,返回B类型对象列表?

实现通用类型转换方法 mapTo

我们可以利用Java的泛型和函数式接口实现这个通用的类型转换方法,让它支持任意类型A到B的转换。

方法定义

定义一个泛型方法,接收两个核心参数:

  • 源类型A的列表List<A>
  • 映射器Function<A, B>,负责将单个A类型对象转换为B类型对象

用Java 8+的Stream API可以简化实现逻辑,代码如下:

import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;

public class MapperUtils {
    // 通用类型转换方法
    public static <A, B> List<B> mapTo(List<A> sourceList, Function<A, B> mapper) {
        // 处理空列表,避免空指针异常
        if (sourceList == null) {
            return List.of();
        }
        // 遍历源列表,通过映射器转换每个元素,最终收集为目标类型列表
        return sourceList.stream()
                .map(mapper)
                .collect(Collectors.toList());
    }
}

示例使用

针对你给出的String转LocalDate场景,直接传入LocalDate::parse作为映射器即可:

import java.time.LocalDate;
import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<LocalDate> dates = MapperUtils.mapTo(
                Arrays.asList("2014-01-01", "2017-05-05"),
                LocalDate::parse // 用方法引用作为映射器
        );
        
        // 验证输出结果
        dates.forEach(System.out::println);
    }
}

扩展使用场景

这个方法是通用的,适配各种类型转换需求:

  • 将Integer列表转成String列表:
    List<String> stringList = MapperUtils.mapTo(
            Arrays.asList(1, 2, 3, 4),
            String::valueOf
    );
    
  • 将自定义对象列表转成属性列表(假设存在User类,包含getName()方法):
    List<String> usernames = MapperUtils.mapTo(
            userList,
            User::getName
    );
    

注意事项

  • 如果源列表包含null元素,映射器需要处理null情况,否则会抛出空指针异常。示例处理方式:
    List<LocalDate> dates = MapperUtils.mapTo(
            Arrays.asList("2014-01-01", null, "2017-05-05"),
            s -> s == null ? null : LocalDate.parse(s)
    );
    
  • Java 9+可以用List.of()替代Collectors.toList()返回不可变列表;Java 16+可使用Collectors.toMutableList()获取可变列表。

内容的提问来源于stack exchange,提问作者borkovicz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 01:20:35