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

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

 

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

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

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

 

Hutool All 文档

maven地址

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

 

引入:

Maven的方式:


    cn.hutool
    hutool-all
    5.5.6

 

 

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 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 beanClass, boolean isToCamelCase, CopyOptions copyOptions)
public static void main(String[] args) {
    testChangeMapToBean();
}

public static void testChangeMapToBean(){
    System.out.println("========change map to bean ========");
    Map 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转换为List>

 

代码:

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

 

测试:

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

public static void testChangeBeansToList(){
    List shapeBeanList = ShapeFactory.create(10);
    System.out.println("ori: "+ shapeBeanList.toString());
    System.out.println("======== change list to list ========");
    List> shapeList = beansToList(shapeBeanList);
    System.out.println("change list to list: "+ 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 to list ========
change list to list: [{color=蓝色, type=平行四边形}, {color=绿色, type=扇形}, {color=橘色, type=扇形}, {color=棕色, type=长方形}, {color=红色, type=平行四边形}, {color=棕色, type=三角形}, {color=棕色, type=长方形}, {color=棕色, type=平行四边形}, {color=粉红色, type=扇形}, {color=红色, type=梯形}]

 

4,将listmap转换成list实体类

 

代码:

/**
 *  将List>转换为List
 * @param sourceList
 * @param destBeanClass
 * @return
 */

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

    }
    return beanList;
}

public static  T mapToBean(Map source, Class 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 to list ========");
    List> shapeLists = ShapeListMapFactory.create(10);
    System.out.println("ori: "+ shapeLists.toString());
    List shapeList1 = listsToBeans(shapeLists, Shape.class);
    System.out.println("change list to list: "+ shapeList1.toString());
}

 

结果:

======== change list to list ========
ori: [{color=橘色, type=扇形}, {color=蓝色, type=圆形}, {color=粉红色, type=圆形}, {color=绿色, type=平行四边形}, {color=绿色, type=长方形}, {color=蓝色, type=扇形}, {color=绿色, type=圆形}, {color=棕色, type=平行四边形}, {color=绿色, type=圆形}, {color=粉红色, type=三角形}]
change list to list: [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 mapToBean(Map source, Class destBeanClass){
        return BeanUtil.mapToBean(source, destBeanClass, false, new CopyOptions());
    }

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

        }
        return beanList;
    }

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

总结

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

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

 

 

你可能感兴趣的:(java,BeanUtil,类型转换)