写在前面: 我是「扬帆向海」,这个昵称来源于我的名字以及女朋友的名字。我热爱技术、热爱开源、热爱编程。
技术是开源的、知识是共享的。
这博客是对自己学习的一点点总结及记录,如果您对 Java、算法 感兴趣,可以关注我的动态,我们一起学习。
用知识改变命运,让我们的家人过上更好的生活
。
通过三种方式实现两个不同泛型集合之间的属性复制
下面的代码可以作为工具类使用
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson.JSON;
import org.springframework.beans.BeanUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class CopyUtil {
/**
* 从List<A>到List<B>
*
* @param list
* @param clazz
* @param <T>
* @return
*/
public static <T> List<T> copyList1(List<?> list, Class<T> clazz) {
return JSON.parseArray(JSON.toJSONString(list), clazz);
}
/**
* 从List<A>到List<B>
*
* @param list
* @param clazz
* @param <T>
* @return
*/
public static <T> List<T> copyList2(List<?> list, Class<T> clazz) {
List<T> result = new ArrayList<>(list.size());
for (Object source : list) {
T target;
try {
target = clazz.getDeclaredConstructor().newInstance();
} catch (Exception e) {
throw new RuntimeException();
}
BeanUtils.copyProperties(source, target);
result.add(target);
}
return result;
}
/**
* 从List<A>到List<B>
*
* @param list
* @param clazz
* @param <T>
* @return
*/
public static <T> List<T> copyList3(List<?> list, Class<T> clazz) {
return (List) list.stream().map((source) -> {
Object target = null;
try {
target = clazz.getDeclaredConstructor().newInstance();
} catch (Exception e) {
e.printStackTrace();
}
BeanUtil.copyProperties(source, target);
return target;
}).collect(Collectors.toList());
}
}
由于水平有限,本博客难免有不足,恳请各位大佬不吝赐教!