0
点赞
收藏
分享

微信扫一扫

对象转换工具

/**
 * @author BNTang
 */
@Slf4j
public class BeanHelper {

    public static <T> T copyProperties(Object source, Class<T> target) {
        if (!ObjectUtils.allNotNull(source, target)) {
            return null;
        }
        try {
            T instance = target.getDeclaredConstructor().newInstance();
            BeanUtils.copyProperties(source, instance);
            return instance;
        } catch (Exception exception) {
            log.error("【对象转换】目标对象{}实例化异常 异常信息:{}", target.getSimpleName(), ExceptionUtils.getStackTrace(exception));
            return null;
        }
    }

    public static <T> Collection<T> copyWithCollection(Collection<Object> source, Class<T> target) {
        if (CollectionUtils.isEmpty(source) || Objects.isNull(target)) {
            return Collections.emptyList();
        }
        return source.stream().filter(Objects::nonNull).map(e -> copyProperties(e, target)).filter(Objects::nonNull).collect(Collectors.toList());
    }

    /**
     * 单个对象转换
     *
     * @param <T>              目标转换类型
     * @param source           数据源
     * @param createTarget     指定目标对象创建方法, 用于创建目标对象和初始赋值步骤
     * @param consumer         转换时的回调函数
     * @param callback         转换时的回调函数 Object:source T:target return:target
     * @param ignoreProperties 不进行转换的属性, 若createTarget进行了赋值操作,应加上被赋值的属性,避免被覆盖
     * @return 目标对象实例
     */
&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;&lt;T&gt;&nbsp;T&nbsp;copyProperties(Object&nbsp;source,&nbsp;Supplier&lt;T&gt;&nbsp;createTarget,&nbsp;BiConsumer&lt;Object,&nbsp;T&gt;&nbsp;consumer,&nbsp;BiFunction&lt;Object,&nbsp;T,&nbsp;T&gt;&nbsp;callback,&nbsp;String...&nbsp;ignoreProperties)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!ObjectUtils.allNotNull(source,&nbsp;createTarget))&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;null;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;T&nbsp;newTarget&nbsp;=&nbsp;null;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newTarget&nbsp;=&nbsp;createTarget.get();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Optional.ofNullable(newTarget).map(target&nbsp;-&gt;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BeanUtils.copyProperties(source,&nbsp;target,&nbsp;ignoreProperties);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(Objects.nonNull(consumer))&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;consumer.accept(source,&nbsp;target);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(Objects.nonNull(callback))&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;callback.apply(source,&nbsp;target);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;target;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}).orElse(null);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(Exception&nbsp;exception)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log.error(&quot;【对象转换】目标对象{}数据转换异常&nbsp;异常信息:{}&quot;,&nbsp;newTarget,&nbsp;ExceptionUtils.getStackTrace(exception));
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;null;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;/**
     * 单个对象转换
     *
     * @param <T>              目标转换类型
     * @param source           数据源
     * @param createTarget     指定目标对象创建方法, 用于创建目标对象和初始赋值步骤
     * @param callback         转换时的回调函数 Object:source T:target return: target
     * @param ignoreProperties 不进行转换的属性, 若createTarget进行了赋值操作,应加上被赋值的属性,避免被覆盖
     * @return 目标对象实例
     */
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;&lt;T&gt;&nbsp;T&nbsp;copyProperties(Object&nbsp;source,&nbsp;Supplier&lt;T&gt;&nbsp;createTarget,&nbsp;BiFunction&lt;Object,&nbsp;T,&nbsp;T&gt;&nbsp;callback,&nbsp;String...&nbsp;ignoreProperties)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;copyProperties(source,&nbsp;createTarget,&nbsp;null,&nbsp;callback,&nbsp;ignoreProperties);
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;/**
     * 单个对象转换
     *
     * @param <T>              目标转换类型
     * @param source           数据源
     * @param createTarget     指定目标对象创建方法, 用于创建目标对象和初始赋值步骤
     * @param consumer         转换时的回调函数
     * @param ignoreProperties 不进行转换的属性, 若createTarget进行了赋值操作,应加上被赋值的属性,避免被覆盖
     * @return 目标对象实例
     */
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;&lt;T&gt;&nbsp;T&nbsp;copyProperties(Object&nbsp;source,&nbsp;Supplier&lt;T&gt;&nbsp;createTarget,&nbsp;BiConsumer&lt;Object,&nbsp;T&gt;&nbsp;consumer,&nbsp;String...&nbsp;ignoreProperties)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;copyProperties(source,&nbsp;createTarget,&nbsp;consumer,&nbsp;null,&nbsp;ignoreProperties);
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;/**
     * 单个对象转换
     *
     * @param <T>              目标转换类型
     * @param source           数据源
     * @param createTarget     指定目标对象创建方法, 用于创建目标对象和初始赋值步骤
     * @param ignoreProperties 不进行转换的属性, 若createTarget进行了赋值操作,应加上被赋值的属性,避免被覆盖
     * @return 目标对象实例
     */
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;&lt;T&gt;&nbsp;T&nbsp;copyProperties(Object&nbsp;source,&nbsp;Supplier&lt;T&gt;&nbsp;createTarget,&nbsp;String...&nbsp;ignoreProperties)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;copyProperties(source,&nbsp;createTarget,&nbsp;null,&nbsp;null,&nbsp;ignoreProperties);
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;/**
     * 单个对象转换
     *
     * @param source       数据源
     * @param createTarget 指定目标对象创建方法, 用于创建目标对象和初始赋值步骤
     * @param <T>          目标转换类型
     * @return 目标对象实例
     */
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;&lt;T&gt;&nbsp;T&nbsp;copyProperties(Object&nbsp;source,&nbsp;Supplier&lt;T&gt;&nbsp;createTarget)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;copyProperties(source,&nbsp;createTarget,&nbsp;null,&nbsp;null,&nbsp;(String[])&nbsp;null);
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;/**
     * 多对象转换
     *
     * @param <T>              目标转换类型
     * @param source           数据源
     * @param createTarget     指定目标对象创建方法, 用于创建目标对象和初始赋值步骤
     * @param consumer         转换时的回调函数
     * @param callback         转换时的回调函数 Object:source T:target return: target
     * @param ignoreProperties 不进行转换的属性, 若createTarget进行了赋值操作,应加上被赋值的属性,避免被覆盖
     * @return 目标对象实例集合
     */
&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;&lt;T&gt;&nbsp;List&lt;T&gt;&nbsp;copyWithCollection(Collection&lt;?&gt;&nbsp;source,&nbsp;Supplier&lt;T&gt;&nbsp;createTarget,&nbsp;BiConsumer&lt;Object,&nbsp;T&gt;&nbsp;consumer,&nbsp;BiFunction&lt;Object,&nbsp;T,&nbsp;T&gt;&nbsp;callback,&nbsp;String...&nbsp;ignoreProperties)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(CollectionUtils.isEmpty(source))&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Collections.emptyList();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;source.stream().filter(Objects::nonNull).map(e&nbsp;-&gt;&nbsp;copyProperties(e,&nbsp;createTarget,&nbsp;consumer,&nbsp;callback,&nbsp;ignoreProperties)).filter(Objects::nonNull).collect(Collectors.toList());
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;/**
     * 多对象转换
     *
     * @param source           数据源
     * @param createTarget     指定目标对象创建方法, 用于创建目标对象和初始赋值步骤
     * @param ignoreProperties 不进行转换的属性, 若createTarget进行了赋值操作,应加上被赋值的属性,避免被覆盖
     * @param <T>              目标转换类型
     * @return 目标对象实例集合
     */
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;&lt;T&gt;&nbsp;List&lt;T&gt;&nbsp;copyWithCollection(Collection&lt;?&gt;&nbsp;source,&nbsp;Supplier&lt;T&gt;&nbsp;createTarget,&nbsp;String...&nbsp;ignoreProperties)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;copyWithCollection(source,&nbsp;createTarget,&nbsp;null,&nbsp;null,&nbsp;ignoreProperties);
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;/**
     * 多对象转换
     *
     * @param source       数据源
     * @param createTarget 指定目标对象创建方法, 用于创建目标对象和初始赋值步骤
     * @param <T>          目标转换类型
     * @return 目标对象实例集合
     */
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;&lt;T&gt;&nbsp;List&lt;T&gt;&nbsp;copyWithCollection(Collection&lt;?&gt;&nbsp;source,&nbsp;Supplier&lt;T&gt;&nbsp;createTarget)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;copyWithCollection(source,&nbsp;createTarget,&nbsp;null,&nbsp;null,&nbsp;(String[])&nbsp;null);
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;/**
     * 多对象转换
     *
     * @param source       数据源
     * @param createTarget 指定目标对象创建方法, 用于创建目标对象和初始赋值步骤
     * @param consumer     转换时的回调函数
     * @param <T>          目标转换类型
     * @return 目标对象实例集合
     */
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;&lt;T&gt;&nbsp;List&lt;T&gt;&nbsp;copyWithCollection(Collection&lt;?&gt;&nbsp;source,&nbsp;Supplier&lt;T&gt;&nbsp;createTarget,&nbsp;BiConsumer&lt;Object,&nbsp;T&gt;&nbsp;consumer)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;copyWithCollection(source,&nbsp;createTarget,&nbsp;consumer,&nbsp;null,&nbsp;(String[])&nbsp;null);
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;/**
     * 多对象转换
     *
     * @param source           数据源
     * @param createTarget     指定目标对象创建方法, 用于创建目标对象和初始赋值步骤
     * @param consumer         转换时的回调函数
     * @param ignoreProperties 不进行转换的属性, 若createTarget进行了赋值操作,应加上被赋值的属性,避免被覆盖
     * @param <T>              目标转换类型
     * @return 目标对象实例集合
     */
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;&lt;T&gt;&nbsp;List&lt;T&gt;&nbsp;copyWithCollection(Collection&lt;?&gt;&nbsp;source,&nbsp;Supplier&lt;T&gt;&nbsp;createTarget,&nbsp;BiConsumer&lt;Object,&nbsp;T&gt;&nbsp;consumer,&nbsp;String...&nbsp;ignoreProperties)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;copyWithCollection(source,&nbsp;createTarget,&nbsp;consumer,&nbsp;null,&nbsp;ignoreProperties);
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;/**
     * 多对象转换
     *
     * @param source       数据源
     * @param createTarget 指定目标对象创建方法, 用于创建目标对象和初始赋值步骤
     * @param callback     转换时的回调函数 Object:source T:target return: target
     * @param <T>          目标转换类型
     * @return 目标对象实例集合
     */
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;&lt;T&gt;&nbsp;List&lt;T&gt;&nbsp;copyWithCollection(Collection&lt;?&gt;&nbsp;source,&nbsp;Supplier&lt;T&gt;&nbsp;createTarget,&nbsp;BiFunction&lt;Object,&nbsp;T,&nbsp;T&gt;&nbsp;callback)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;copyWithCollection(source,&nbsp;createTarget,&nbsp;null,&nbsp;callback,&nbsp;(String[])&nbsp;null);
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;/**
     * 多对象转换
     *
     * @param source           数据源
     * @param createTarget     指定目标对象创建方法, 用于创建目标对象和初始赋值步骤
     * @param callback         转换时的回调函数 Object:source T:target return: target
     * @param ignoreProperties 不进行转换的属性, 若createTarget进行了赋值操作,应加上被赋值的属性,避免被覆盖
     * @param <T>              目标转换类型
     * @return 目标对象实例集合
     */
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;&lt;T&gt;&nbsp;List&lt;T&gt;&nbsp;copyWithCollection(Collection&lt;?&gt;&nbsp;source,&nbsp;Supplier&lt;T&gt;&nbsp;createTarget,&nbsp;BiFunction&lt;Object,&nbsp;T,&nbsp;T&gt;&nbsp;callback,&nbsp;String...&nbsp;ignoreProperties)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;copyWithCollection(source,&nbsp;createTarget,&nbsp;null,&nbsp;callback,&nbsp;ignoreProperties);
&nbsp;&nbsp;&nbsp;&nbsp;}
}


举报

相关推荐

0 条评论