在使用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
参考 BeanMap 和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=圆形}
调用 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='三角形'}
/**
* 将List转换为List
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=梯形}]
/**
* 将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='三角形'}]
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对比,如何呢?