5分钟快3首页    注册   登录
5分钟快3 = way to explore
5分钟快3 是一个5分钟快3关于 分享和探索的地方
现在注册
已注册用户请  登录
rqxiao
5分钟快3  ›  程序员

Java 有没有这样 List<A>转成 List<B>的5分钟快3工具 或者5分钟快3方法 可以分享下

  •  
  •   rqxiao · 164 天前 · 3023 次点击
    这是一个创建于 164 天前的主题,其中的信息可能已经有所发展或是发生改变。

    B 的属性都来自于 A 中,而且只会比 A 少,属性名也一样

    输入 List , B 输出 List

    33 回复  |  直到 2019-09-13 09:41:50 +08:00
    jorneyr
        1
    jorneyr   164 天前
    List<B> listB = listA.stream().map(e => { B b = new B(); BeanUtils.copyProperties(e, b); return b; }).collect(Collectors.toList());

    大概就是这么个样子
    colincat
        3
    colincat   164 天前 via iPhone
    Mapstruct
    wysnylc
        4
    wysnylc   164 天前
    @jorneyr #1 写得没毛病,但是 beanUtils 5分钟快3我 建议还是手写 set 因为 copyProperties 对于属性名和类型都有要求而且 spring 和 apache 的规则还不一样,所以最后5分钟快3你 会发现还是手动 set 得了
    Ravenddd
        5
    Ravenddd   164 天前 via Android
    笨5分钟快3方法 ,转成 json 再转 bean
    ilotuo
        6
    ilotuo   164 天前
    1L 手打的吧 "=>" 错了
    简版:
    List<B> listB = listA.stream().mapToObj(B::new).collect(Collectors.toList());
    luozic
        7
    luozic   164 天前 via iPhone
    先转 jsonstring 或者其他序列化的东西再转
    zjp
        8
    zjp   164 天前 via Android
    Dozer 不过已经好几年没有更新了,效率一般
    no1xsyzy
        9
    no1xsyzy   164 天前   ❤️ 1
    1. 写成 Haskell 风格函数签名:(A -> B) -> [A] -> [B]

    2. 丢进 hoogle 5分钟快3你 就知道这玩意叫做 map:<http://hoogle.haskell.org/?hoogle=%28A+-%3E+B%29+-%3E+%5BA%5D+-%3E+%5BB%5D&scope=set%3Astackage>

    3. 然后去查 Java 里 map 怎么用
    kaedea
        10
    kaedea   164 天前
    函数式编程里的集合操作符了解一下,对应 Java 的实现就是 Stream#map 这个操作符
    kaedea
        11
    kaedea   164 天前
    顺便说一下 Stream 是 Java 8 开始才支持的特性,如果在 Java 8 以前,可以使用类似的 Stream 库,比如 Eclipse 家的,或者直接上 RxJava 也行
    trait
        12
    trait   164 天前
    list_a.iterate().map(|a| a.to_b())
    xuanbg
        13
    xuanbg   164 天前
    Json.toObject(Json.toJson(a), B.class);
    aguesuka
        14
    aguesuka   164 天前 via Android
    有继承关系吗?没有只能依赖反射。lst.stream().map(funcA2B).collect(toList)
    jamesxu
        15
    jamesxu   164 天前 via iPhone
    dozer 或者 modelmapper
    francis59
        16
    francis59   164 天前
    可以试试 orika-mapper: http://github.com/orika-mapper/orika
    HangoX
        17
    HangoX   164 天前
    自己写个反射拷贝就好了
    hantsy
        18
    hantsy   163 天前
    ModelMapper
    luckylo
        19
    luckylo   163 天前 via Android
    @jorneyr 不建议用 BeanUtils ( spring 包下的)。反正5分钟快3我 是莫名其妙的遇见一次效率问题。最后还是手动 setter 好的。

    #3 3 楼的 Mapstruct 听说是个不错选择,还没试过
    parorisim
        20
    parorisim   163 天前 via iPhone
    map 操作符……5分钟快3我 半个全栈经常遇到5分钟快3你 这种问题,无疑 map 是最方便的
    jorneyr
        21
    jorneyr   163 天前
    @ilotuo 哈哈,最近在写 JS,-> 和 JS 的 => 搞混了。
    rqxiao
        22
    rqxiao   163 天前
    @ilotuo stream().mapToObj 怎么没这5分钟快3方法
    zhaorunze
        23
    zhaorunze   163 天前
    List<A> = (List)(Object)List<B>
    notreami
        24
    notreami   163 天前
    必须 orika 啊
    rqxiao
        25
    rqxiao   163 天前
    @zhaorunze 这样不行吧,实际上没有转成 List<A> 还是 List<B>
    xiaoyaojc
        26
    xiaoyaojc   163 天前
    首先要看 a 和 b 的内容,是不是可以直接 copy 的,如果是,直接 copy 属性,如果不是,那只能手动 set 了。
    if (CollectionUtils.isEmpty(sourceList)) {
    return Lists.newArrayList();
    }
    List<T> resultList = Lists.newArrayListWithCapacity(sourceList.size());
    for (Object source : sourceList) {
    try {
    T target = targetClass.ne5分钟快3Win stance();
    copy(source, target);
    resultList.add(target);
    } catch (Exception e) {
    throw new RuntimeException(e);
    }
    }
    return resultList;
    xiaoyaojc
        27
    xiaoyaojc   163 天前
    其中 copy 用 BeanCopier,一般用于对象转换,比如 DO 转 BO 等等。B 的属性都来自于 A 中,而且只会比 A 少,属性名也一样,5分钟快3你 的这种情况用 copy 绝对是最快的,不用转 json。转 json 反而慢
    jsnjfz
        28
    jsnjfz   163 天前
    可以看看 guava 中有没5分钟快3工具 类
    zhaorunze
        29
    zhaorunze   163 天前   ❤️ 1
    @rqxiao 5分钟快3你 试一下再说啊
    luckylo
        30
    luckylo   163 天前 via Android
    @zhaorunze java8 貌似没有,好像在 java11 里面有
    rqxiao
        31
    rqxiao   163 天前
    @zhaorunze 试过了啊 List<A> 里面的元素属性 实际上都是 B 的属性,
    ixx
        32
    ixx   163 天前
    共有属性放在 B 中,A extents B 同时添加多出来的字段 ,剩下的直接转就行了
    mangodai
        33
    mangodai   162 天前
    bean copy util 都有的
    5分钟快3关于   ·   FAQ   ·   API   ·   5分钟快35分钟快3我 们 的愿景   ·   广告投放   ·   感谢   ·   实用小5分钟快3工具   ·   2681 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 15:32 · PVG 23:32 · LAX 07:32 · JFK 10:32
    ♥ Do have faith in what you're doing.