附上:BeanUtils、BeanCopier、Dozer、Orika 哪个性能最强?https://mp.weixin.qq.com/s/aCWkUiE1-h5mtDrqEiPKHQ
对象映射一般有apache和springframework下提供BeanUtils.copyProperties(Object source,Object target);
import com.google.common.collect.Lists;
import org.dozer.DozerBeanMapper;
import org.dozer.Mapper;
import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 对象映射工具类
*
*/
public class DozerUtils {
private static Mapper MAPPER = new DozerBeanMapper();
/**
* 映射单个对象(泛型方法)
* @param s 源对象
* @param t 目标类型
* @param <S>
* @param <T>
* @return
*/
public static <S, T> T mapper(S s, Class<T> t) {
if (s == null) {
return null;
}
try {
return MAPPER.map(s, t);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 映射单个对象至给定对象
* @param s 源对象
* @param d 目标对象
*/
public static void mapper(Object s, Object d) {
MAPPER.map(s, d);
}
/**
* 映射对象列表
* @param sourceList
* @param t
* @param <S>
* @param <T>
* @return
*/
public static <S, T> List<T> mapList(List<S> sourceList, Class<T> t) {
if (sourceList == null) {
return null;
}
List<T> destinationList = Lists.newArrayList();
for (Object sourceObject : sourceList) {
T destinationObject = MAPPER.map(sourceObject, t);
destinationList.add(destinationObject);
}
return destinationList;
}
/**
* 映射单个对象至map对象
* @param obj 源对象
* @return
* @throws Exception
*/
public static Map<String, Object> objectToMap(Object obj) throws Exception {
if (obj == null) {
return null;
}
Map<String, Object> map = new HashMap<>();
BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
for (PropertyDescriptor property : propertyDescriptors) {
String key = property.getName();
if (key.compareToIgnoreCase("class") == 0) {
continue;
}
Method getter = property.getReadMethod();
Object value = getter != null ? getter.invoke(obj) : null;
map.put(key, value);
}
return map;
}
}
具体使用方法也非常简单:
List<SealStockListsBO> collect = records.stream().map(sealIndexStatistics -> {
SealStockListsBO sealStockListsBO1 = new SealStockListsBO();
//dozer映射
SealStockListsBO sealStockListsBO = DozerUtils.mapper(sealIndexStatistics, SealStockListsBO.class);
//spring 映射
BeanUtils.copyProperties(sealIndexStatistics,sealStockListsBO1);
return sealStockListsBO;
}).collect(Collectors.toList());
如有不对,请多多指正。。。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/118748.html