使用 BeanUtil 将Map与Bean进行相互转换

使用 BeanUtil 将 Map 与 Bean 进行相互转换

 

 在使用fastjson的JSONBeanMap,进行Bean对象和Map相互转换,

学习了这两种方式把Map和Bean相互转换,我们学习另外一个更好用的转换类 BeanUtil

用到类型之间的转换,就不得不提BeanUtil 这个类了

 

Hutool All 文档

maven地址

Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。

 

引入:

Maven的方式:

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.5.6</version>
</dependency>

 

 

0,数据准备:

  参考 BeanMap 和Map对象相互转换 中的数据准备

 

1,将Bean对象转换为map

调用 BeanUtil   beanToMap(Object bean)

 

测试:

public static void main(String[] args) {
    testChangeBeanToMap();
}

public static void testChangeBeanToMap(){
    System.out.println("======== change bean to map ========");
    Shape shape1 = new Shape("红色", "圆形");
    Map<String, Object> shapeMap = BeanUtil.beanToMap(shape1);
    System.out.println("change bean to map: "+shapeMap.toString());
}

结果:

======== change bean to map ========
change bean to map: {color=红色, type=圆形}

 

2,将map转换为Bean对象

调用 BeanUtil 的 mapToBean(Map<?, ?> map, Class<T> beanClass, boolean isToCamelCase, CopyOptions copyOptions)
public static void main(String[] args) {
    testChangeMapToBean();
}

public static void testChangeMapToBean(){
    System.out.println("========change map to bean ========");
    Map<String,Object> single = new HashMap<>();
    single.put("color","绿色");
    single.put("type","三角形");
    Shape shape2 = BeanUtil.mapToBean(single, Shape.class, false, new CopyOptions());
    System.out.println("change map to bean: "+shape2.toString());
}

结果:

======== change map change to bean ========
change map to bean: Shape{color='绿色', type='三角形'}

 

3,将List<Bean>转换为List<Map<String, Object>>

 

代码:

/**
 * 将List<Bean>转换为List<Map<String, Object>>
 *
 * @param sourceList
 * @return
 */
public static <T>  List<Map<String, Object>> beansToList(List<T> sourceList){
    List<Map<String, Object>>  destList =new ArrayList<>();
    for(Object source: sourceList){
        Map<String, Object> map = BeanUtil.beanToMap(source);
        destList.add(map);
    }
    return destList;
}

 

测试:

public static void main(String[] args) {
    testChangeBeansToList();
}

public static void testChangeBeansToList(){
    List<Shape> shapeBeanList = ShapeFactory.create(10);
    System.out.println("ori: "+ shapeBeanList.toString());
    System.out.println("======== change list<Bean> to list<Map> ========");
    List<Map<String, Object>> shapeList = beansToList(shapeBeanList);
    System.out.println("change list<Bean> to list<Map>: "+ shapeList.toString());
    System.out.println();
}

结果:

ori: [Shape{color='蓝色', type='平行四边形'}, Shape{color='绿色', type='扇形'}, Shape{color='橘色', type='扇形'}, Shape{color='棕色', type='长方形'}, Shape{color='红色', type='平行四边形'}, Shape{color='棕色', type='三角形'}, Shape{color='棕色', type='长方形'}, Shape{color='棕色', type='平行四边形'}, Shape{color='粉红色', type='扇形'}, Shape{color='红色', type='梯形'}]
======== change list<Bean> to list<Map> ========
change list<Bean> to list<Map>: [{color=蓝色, type=平行四边形}, {color=绿色, type=扇形}, {color=橘色, type=扇形}, {color=棕色, type=长方形}, {color=红色, type=平行四边形}, {color=棕色, type=三角形}, {color=棕色, type=长方形}, {color=棕色, type=平行四边形}, {color=粉红色, type=扇形}, {color=红色, type=梯形}]

 

4,将listmap转换成list实体类

 

代码:

/**
 *  将List<Map<String,Object>>转换为List<Bean>
 * @param sourceList
 * @param destBeanClass
 * @return
 */

public static <T> List<T>  listsToBeans(List<Map<String, Object>> sourceList, Class<T> destBeanClass){
    List<T> beanList=new ArrayList<>();
    for(Map<String, Object> map: sourceList){
        T dest = mapToBean(map, destBeanClass);
        beanList.add(dest);

    }
    return beanList;
}

public static <T> T mapToBean(Map<String, Object> source, Class<T> destBeanClass){
    return BeanUtil.mapToBean(source, destBeanClass, false, new CopyOptions());
}

 

测试:

public static void main(String[] args) {
    testChangeListToBeans();
}

public static void testChangeListToBeans(){
    System.out.println("======== change list<Map> to list<Bean> ========");
    List<Map<String, Object>> shapeLists = ShapeListMapFactory.create(10);
    System.out.println("ori: "+ shapeLists.toString());
    List<Shape> shapeList1 = listsToBeans(shapeLists, Shape.class);
    System.out.println("change list<Map> to list<Bean>: "+ shapeList1.toString());
}

 

结果:

======== change list<Map> to list<Bean> ========
ori: [{color=橘色, type=扇形}, {color=蓝色, type=圆形}, {color=粉红色, type=圆形}, {color=绿色, type=平行四边形}, {color=绿色, type=长方形}, {color=蓝色, type=扇形}, {color=绿色, type=圆形}, {color=棕色, type=平行四边形}, {color=绿色, type=圆形}, {color=粉红色, type=三角形}]
change list<Map> to list<Bean>: [Shape{color='橘色', type='扇形'}, Shape{color='蓝色', type='圆形'}, Shape{color='粉红色', type='圆形'}, Shape{color='绿色', type='平行四边形'}, Shape{color='绿色', type='长方形'}, Shape{color='蓝色', type='扇形'}, Shape{color='绿色', type='圆形'}, Shape{color='棕色', type='平行四边形'}, Shape{color='绿色', type='圆形'}, Shape{color='粉红色', type='三角形'}]

 

BeanUtils 代码

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class BeanUtils {

    public static <T> T mapToBean(Map<String, Object> source, Class<T> destBeanClass){
        return BeanUtil.mapToBean(source, destBeanClass, false, new CopyOptions());
    }

    /**
     *  将List<Map<String,Object>>转换为List<Bean>
     * @param sourceList
     * @param destBeanClass
     * @return
     */
    public static <T> List<T>  listsToBeans(List<Map<String, Object>> sourceList, Class<T> destBeanClass){
        List<T> beanList=new ArrayList<>();
        for(Map<String, Object> map: sourceList){
            T dest = mapToBean(map, destBeanClass);
            beanList.add(dest);

        }
        return beanList;
    }

    /**
     * 将List<Bean>转换为List<Map<String, Object>>
     *
     * @param sourceList
     * @return
     */
    public static <T>  List<Map<String, Object>> beansToList(List<T> sourceList){
        List<Map<String, Object>>  destList =new ArrayList<>();
        for(Object source: sourceList){
            Map<String, Object> map = BeanUtil.beanToMap(source);
            destList.add(map);
        }
        return destList;
    }
}

总结

    BeanUtil进行类型之间的转换,比较方便好用。还有很多可能,可以多看看源码。

    它的性能跟beanMap对比,如何呢?

 

 

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天狼1222

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值