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

2019-09-11 17:40:21 +08:00
 rqxiao

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

输入 List , B 输出 List

8547 次点击
所在节点    程序员
33 条回复
jorneyr
2019-09-12 09:00:42 +08:00
@ilotuo 哈哈,最近在写 JS,-> 和 JS 的 => 搞混了。
rqxiao
2019-09-12 09:09:00 +08:00
@ilotuo stream().mapToObj 怎么没这方法
zhaorunze
2019-09-12 09:31:48 +08:00
List<A> = (List)(Object)List<B>
notreami
2019-09-12 09:55:56 +08:00
必须 orika 啊
rqxiao
2019-09-12 10:19:17 +08:00
@zhaorunze 这样不行吧,实际上没有转成 List<A> 还是 List<B>
xiaoyaojc
2019-09-12 10:46:17 +08:00
首先要看 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.newInstance();
copy(source, target);
resultList.add(target);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
return resultList;
xiaoyaojc
2019-09-12 10:47:57 +08:00
其中 copy 用 BeanCopier,一般用于对象转换,比如 DO 转 BO 等等。B 的属性都来自于 A 中,而且只会比 A 少,属性名也一样,你的这种情况用 copy 绝对是最快的,不用转 json。转 json 反而慢
jsnjfz
2019-09-12 11:09:06 +08:00
可以看看 guava 中有没工具类
zhaorunze
2019-09-12 11:17:19 +08:00
@rqxiao 你试一下再说啊
luckylo
2019-09-12 12:35:03 +08:00
@zhaorunze java8 貌似没有,好像在 java11 里面有
rqxiao
2019-09-12 13:41:06 +08:00
@zhaorunze 试过了啊 List<A> 里面的元素属性 实际上都是 B 的属性,
ixx
2019-09-12 14:14:50 +08:00
共有属性放在 B 中,A extents B 同时添加多出来的字段 ,剩下的直接转就行了
mangodai
2019-09-13 09:41:50 +08:00
bean copy util 都有的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/600122

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX