【工具】 - BeanUtils增强篇

public class BeanPlusUtils extends BeanUtils { public static <S, T> List<T> copyListProperties(List<S> sources, Supplier<T> target) { return copyListProperties(sources, target, null); } public static <S, T> T copySingleProperties(S source, Supplier<T> target) { return copySingleProperties(source, target, null); } /** * 使用场景:Entity、Bo、Vo层数据的复制,因为BeanUtils.copyProperties只能给目标对象的属性赋值,却不能在List集合下循环赋值,因此添加该方法 * 如:List<AdminEntity> 赋值到 List<AdminVo> ,List<AdminVo>中的 AdminVo 属性都会被赋予到值 * S: 数据源类 ,T: 目标类::new(eg: AdminVo::new) */ public static <S, T> List<T> copyListProperties(List<S> sources, Supplier<T> target, ColaBeanUtilsCallBack<S, T> callBack) { if (CollectionUtils.isEmpty(sources)){ return new ArrayList<>(); } List<T> list = new ArrayList<>(sources.size()); for (S source : sources) { T t = target.get(); copyProperties(source, t); list.add(t); if (callBack != null) { // 回调 callBack.callBack(source, t); } } return list; } public static <S, T> T copySingleProperties(S source, Supplier<T> target, ColaBeanUtilsCallBack<S, T> callBack) { T t = target.get(); copyProperties(source, t); if (callBack != null) { // 回调 callBack.callBack(source, t); } return t; } @FunctionalInterface public interface ColaBeanUtilsCallBack<S, T> { void callBack(S t, T s); } /** * 将集合对象中的类型转换成另一种类型 * * @param collection 集合 * @param clazz 目标对象 * @param <T> * @return */ public static <T> Collection<T> covertObject(Collection<?> collection, Class<T> clazz) { Collection<T> newCollection = collection.stream().map(oldObject -> { T instance = null; try { instance = clazz.newInstance(); } catch (Exception e) { e.printStackTrace(); } BeanUtils.copyProperties(oldObject, instance); return instance; }).collect(Collectors.toList()); return newCollection; }; }

猜你喜欢

转载自www.cnblogs.com/lycsmzl/p/13391758.html