文档章节

java把map集合转成对象集合

章大大
 章大大
发布于 2016/08/29 14:29
字数 329
阅读 175
收藏 3
//用hibernate查询后的结果集直接转已有的对象
List list = session.createSQLQuery(sql.toString())
              .setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP).list();

Class[] cla = {对象A.class,对象B.class};//其中对象A extends 对象B
List result =  ClassHelper.mapListToEntityList(list,cla);

ClassHelp类


public class ClassHelper{

	/*map集合转对象集合 是否格式化NULL数据*/
	public static List mapListToEntityList(List<Map<String, Object>> sourceList, Class[] classes,Boolean isFormat) throws InstantiationException, IllegalAccessException {
		if(sourceList==null || sourceList.size()==0){
			return null;
		}
		Map<String, Field> usedFields = getUsedFields(sourceList.get(0).keySet(), classes);
		long l  = System.currentTimeMillis();
		Class clazz = classes[0];
		List result = new ArrayList(sourceList.size());
		Object entity;
		Field field;
		for (Map<String,Object> map : sourceList) {
			entity = clazz.newInstance();
			
			for (Map.Entry<String, Object> entry : map.entrySet()) {
				if((field = usedFields.get(entry.getKey()))==null){
					continue;
				}
//					System.out.println(entry.getKey()+"="+usedFields.get(entry.getKey())+"="+entry.getValue());
				if(isFormat){
					if(field.getType() == Double.class){
						field.set(entity, Arith.doubleFormat(entry.getValue()));
					}else if (field.getType() == Boolean.class) {
						field.set(entity, entry.getValue()!=null && entry.getValue().equals(1));
					}else if(field.getType() == String.class){
						field.set(entity,Arith.strFormat(entry.getValue()));
					}else {
						field.set(entity,entry.getValue());
					}
				}else{
					if(field.getType() == Double.class){
						field.set(entity,(Double)(entry.getValue()));
					}else if (field.getType() == Boolean.class) {
						field.set(entity, entry.getValue()!=null && entry.getValue().equals(1));
					}else if(field.getType() == String.class){
						field.set(entity,(String)entry.getValue());
					}else {
						field.set(entity,entry.getValue());
					}
				}
				
			}
			result.add(entity);
		}
		System.out.println(System.currentTimeMillis()-l+"ms result.len="+result.size());
		return result;
	}
	/**map集合转对象集合*/
	public static List mapListToEntityList(List<Map<String, Object>> sourceList, Class[] classes)      throws InstantiationException, IllegalAccessException {
		return mapListToEntityList(sourceList, classes, true);
	}
	private static Map<String,Field> getUsedFields( Set<String> keys,Class[] classes) {
		
		HashMap<String, Field> result = new HashMap<String, Field>();
		List<Field> fields = getAllDeclaredField(classes);
		for (String key : keys) {
			for (Field field : fields) {
				String lowerCase = field.getName().toLowerCase();
				if(key.toLowerCase().equals(lowerCase)){
					field.setAccessible(true);
					result.put(key, field);
					fields.remove(field);
					break;
				}
			}
		}
		return result;
	}
	private static List<Field> getAllDeclaredField(Class[] classes) {
		
		List<Field> result = new ArrayList<Field>();
		for (Class clazz : classes) {
			Field[] fields = clazz.getDeclaredFields();
			for (Field field : fields) {
				result.add(field);
			}
		}

		return result;
	}
}

 

© 著作权归作者所有

章大大
粉丝 0
博文 40
码字总数 9223
作品 0
宁波
程序员
私信 提问
JSON-lib框架,转换JSON、XML

Json-lib可以将Java对象转成json格式的字符串,也可以将Java对象转换成xml格式的文档,同样可以将json字符串转换成Java对象或是将xml字符串转换成Java对象。 一、 准备工作 1、 首先要去官方...

五大三粗
2015/11/03
0
0
JSON-lib框架,转换JSON、XML不再困难

JSON-lib框架,转换JSON、XML不再困难 Json-lib可以将Java对象转成json格式的字符串,也可以将Java对象转换成xml格式的文档,同样可以将json字符串转换成Java对象或是将xml字符串转换成Java对...

DavidBao
2015/05/01
0
0
在Scala中调用Java方法返回复杂集合类的互操作问题

在Scala 中调用Java方法返回复杂对象 如List> ,这种如何转成Scala的集合对象?或是在Scala中如何操作这种对象? 如下例中要取到Map中的值改怎么写?

tony.li
2014/10/19
3.9K
1
Java8 Lambda表达式.md

为了支持函数式编程,Java 8引入了Lambda表达式. 在Java 8中采用的是内部类来实现Lambda表达式.具体实现代码,可以通过debug看, 同时通过字节码查看工具及反编译工具来验证. 自从lambda表达式...

程序员诗人
2017/02/25
0
0
Android使用缓存优化ListView

ListView调用Adapter的getView方法获取每一个Item布局,将这些已经获得的Item布局放入缓存,将大大提高获取数据的效率,而且节省更多的流量,将数据进行缓存有两种方法是,一种是将内存缓存一...

xiahuawuyu
2012/09/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

recv send 的 MSG_DONTWAIT 、 MSG_WAITALL 参数

基本概念: 阻塞IO:: socket 的阻塞模式意味着必须要做完IO 操作(包括错误)才会返回。 非阻塞IO:: 非阻塞模式下无论操作是否完成都会立刻返回,需要通过其他方式来判断具体操作是否成功。 ...

shzwork
31分钟前
2
0
怎么给开源项目提PR?

1. Fork 你想要提交 PR 的项目 2. 下载到本地 相关步骤如下: 在你需要的文件夹下面,右键使用 git bash 命令,打开 git 命令框 执行如下指令可将项目代码下载到当前目录 1代码仓库地址为示例...

xiaomin0322
34分钟前
2
0
浅复制与深复制概念

1.浅复制与深复制概念 ⑴浅复制(浅克隆) 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅复制仅仅复制所考虑的对象,而不复制...

GodIsCj
34分钟前
1
0
如何在工作中快速成长?致工程师的10个简单技巧

阿里妹导读:阿里有句非常经典的土话,“今天的最好表现,是明天的最低要求。”如何挖掘潜能、发现更好的自己?今天,阿里巴巴高级无线开发专家江建明将认知升级的方法总结出来,帮助你获得快...

阿里云官方博客
57分钟前
2
0
如何 SSH 到 Linux 服务器里的特定目录及执行命令?

这种操作对于新手来讲特别常见,良许之前也是这样。在本文,老司机将带你来进行更高效的操作,只需一步即可达到你想要的效果。 而且,不仅仅是实现快速进入到 Linux 服务器特定的目录,还可以...

架构师springboot
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部