java 合并对象_java 中怎么合并同类对象的属性

展开全部

package cn.utils;

import java.beans.BeanInfo;

import java.beans.IntrospectionException;

import java.beans.Introspector;

import java.beans.PropertyDescriptor;

import java.lang.reflect.InvocationTargetException;

import java.sql.Timestamp;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.Date;

import java.util.Iterator;

import java.util.List;

import java.util.Map;

import java.util.regex.Pattern;

import org.apache.commons.beanutils.BeanUtils;public class ExtendObject {

/**

* 将相同类型的对象的内容62616964757a686964616fe59b9ee7ad9431333361323466向右合并

* @param beanType 返回对象的类型

* @param initObject 包含原始数据的对象

* @param updateObject包含修改后数据的对象

* @return返回两个对象的合并,相同属性的值如果convertedObject中包含,且不为null的话取它的值,否则取returnedObject的值

*/

@SuppressWarnings("unchecked")

public Object extendObject(Object beanType, Object initObject, Object updateObject){

Map map1 = BeanToMap(initObject);

Map map2 = BeanToMap(updateObject);

List list = getMapKeySet(map1);

for(int i=0; i

if(null!=map2Value){

map1.put(list.get(i), map2Value);

}

}

return MapToBean(beanType, map1);

}

/**

* 将map转化为bean

* @param bean 将要转化成为的对象

* @param map 被转化的map对象

*/

@SuppressWarnings("unchecked")

public Object MapToBean(Object bean,Map map){

Object type = null;

Date date = null ;

try {

type = bean.getClass().newInstance();

BeanInfo beanInfo = Introspector.getBeanInfo(bean.getClass());

for(PropertyDescriptor p: beanInfo.getPropertyDescriptors()){

String propertyName = p.getName();

Object mapValue = map.get(propertyName);

//去掉键为'class'的键值对

if(null!=mapValue&&!"class".equals(propertyName)){

//判断该字符转是否为日期类型

if(CheckType.isDateType((String)mapValue)){

String dateType = CheckType.getDateType((String)mapValue);

if(dateType.equals("yyyy-MM-dd HH:mm:ss")){

date = new SimpleDateFormat(dateType).parse((String)mapValue);

p.getWriteMethod().invoke(type, new Timestamp(date.getTime()));

}else{

p.getWriteMethod().invoke(type, date);

}

//判断该字符串是否为整型,同时忽略值为数字,但是类型是字符串的Id们

}else if(CheckType.isInt((String) mapValue)&&(!Pattern.matches("/w*Id", propertyName))){

p.getWriteMethod().invoke(type, Integer.getInteger((String)mapValue).intValue());

//默认剩下的类型都是字符串型

}else{

p.getWriteMethod().invoke(type, mapValue);

}

}

}

} catch (IntrospectionException e) {

e.printStackTrace();

} catch (InstantiationException e) {

e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();

} catch (IllegalArgumentException e) {

e.printStackTrace();

} catch (InvocationTargetException e) {

e.printStackTrace();

} catch (ParseException e) {

e.printStackTrace();

}

return type;

}

/**

* 将bean转化为map

* @param object

* @return

*/

@SuppressWarnings("unchecked")

public Map BeanToMap(Object object){

Map map = null ;

try {

map = BeanUtils.describe(object);

} catch (IllegalAccessException e) {

e.printStackTrace();

} catch (InvocationTargetException e) {

e.printStackTrace();

} catch (NoSuchMethodException e) {

e.printStackTrace();

}

return map;

}

/**

* 获得对应Map的键值

* @param map

* @return

*/

@SuppressWarnings("unchecked")

public List getMapKeySet(Map map){

List list = new ArrayList();

Iterator iterator = map.keySet().iterator();

while(iterator.hasNext()){

list.add(iterator.next());

}

return list;

}///**

// * @param args

// */

//public static void main(String[] args) throws Exception{

//System.out.println(isInt("1"));

//Admin a = new Admin();

//a.setAdminId("1");

//a.setAdminPassword("1");

//

//Admin b = new Admin();

//b.setAdminPassword("2");

//Admin c = (Admin)extendObject(new Admin(),a,b);

//System.out.println(c.getAdminId()+"----"+c.getAdminPassword());

//}

}

------------------------------------------------------------------------------------

package cn.utils;

import java.util.regex.Pattern;

public class CheckType {

/**

* 判断该字符串是否为日期类型

* @param str

* @return

*/

public static boolean isDateType(String str){

Boolean b = false;

String dateType1 ="/d{4}-/d{2}-/d{2}/s/d{2}:/d{2}:/d{2}./d*";

String dateType2 ="/d{4}-/d{2}-/d{2}/s/d{2}:/d{2}:/d{2}";

String dateType3 ="/d{4}-/d{2}-/d{2}";

if(Pattern.matches(dateType1, str)||

Pattern.matches(dateType2, str)||

Pattern.matches(dateType3, str)){

b = true;

}

return b;

}/**

* 返回字符串所属日期格式

* @param str

* @return

*/

public static String getDateType(String str){

String dateType1 ="/d{4}-/d{2}-/d{2}/s/d{2}:/d{2}:/d{2}./d*";

String dateType2 ="/d{4}-/d{2}-/d{2}/s/d{2}:/d{2}:/d{2}";

String dateType3 ="/d{4}-/d{2}-/d{2}";

if(Pattern.matches(dateType1, str)||

Pattern.matches(dateType2, str)){

return"yyyy-MM-dd HH:mm:ss";

}

if(Pattern.matches(dateType3, str)){

return"yyyy-MM-dd";

}

return null;

}

/**

* 判断该字符串是否为整型

* @param str

* @return

*/

public static boolean isInt(String str){

Boolean b = false;

if(Pattern.matches("/d+", str)){

b = true;

}

return b;

}

}

追问

这个我在网上收到过,我要的是具有可扩展性的,不过还是谢谢你

本回答由提问者推荐

2Q==

已赞过

已踩过<

你对这个回答的评价是?

评论

收起


版权声明:本文为weixin_30261255原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。