Map>不能说的秘密

MapValueCloneTest.javajava

package org.apache.java.test;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import org.apache.java.entity.EmployInfo;
import org.apache.java.entity.PassInfo;

public class MapValueCloneTest {

    public static void main(String[] args) throws Exception{
        HashMap<String, List<EmployInfo>> employInfo = new HashMap<String, List<EmployInfo>>();

        List<EmployInfo> employList = new ArrayList<EmployInfo>();
        employList.add(new EmployInfo("libo", "18767136865"));
        employList.add(new EmployInfo("liba", "18767136864"));
        employList.add(new EmployInfo("liaa", "18767136863"));
        
        employInfo.put("1", employList);
        employInfo.put("2", employList);
        

        PassInfo[] sre = new PassInfo[3];
        for(int i = 0; i < sre.length; i++){
            sre[i] = new PassInfo();
        }
        Map<String,List<Object>> passInfo = mapInfoToOtherMap(employInfo,sre);
        Iterator<Entry<String, List<Object>>> pasInfo = passInfo.entrySet().iterator();
        while (pasInfo.hasNext()) {
            List<Object> lpInfo = pasInfo.next().getValue();
            for (Object tempPass : lpInfo) {
                System.out.println("员工姓名:" + ((PassInfo) tempPass).getEmployName());
                System.out.println("员工号码:" + ((PassInfo) tempPass).getEmployNumber());
            }
        }
    }

    /**
     * Map之间的值拷贝
     * 
     * @Description: Map中包含List对象,List泛型,实现两个Map之间的值拷贝
     * @param srcInfo
     *        源Map
     * @param objEntity
     *        生成对象实例数组
     * @return 生成后的Map对象
     * @throws Exception     
     */
    @SuppressWarnings({ "unchecked", "rawtypes" })
    public static Map<String, List<Object>> mapInfoToOtherMap(
                    HashMap srcInfo, Object... objEntity)
                    throws Exception {

        // 返回对象的实例化
        Map<String,List<Object>> returnInfo = new HashMap<String,List<Object>>();
        
        // 得到迭代对象
        Iterator<?> iterInfo = srcInfo.entrySet().iterator();
        // 开始迭代
        while (iterInfo.hasNext()) {

            // 返回对象的List集合
            List obj = new ArrayList<Object>();

            // 获取Map中的键值对
            Entry<String, List<Object>> entryInfo = (Entry<String, List<Object>>) iterInfo.next();
            String key = entryInfo.getKey();
            List<Object> insInfo = entryInfo.getValue();
            
            // 对List对象进行迭代
            Iterator<Object> objInfo = insInfo.iterator();
            
            // 临时变量,用户获取生成的对象实例
            int k = 0;
            // 开始迭代
            while (objInfo.hasNext()) {
                
                // 得到List中的Bean对象,经过反射拿到属性
                Object srcObj = objInfo.next();
                Field[] srcFiled = srcObj.getClass().getDeclaredFields();

                // 获取生成的对象实例,经过反射拿到属性
                Object dirObj = objEntity[k];
                Field[] dirFiled = dirObj.getClass().getDeclaredFields();

                for (int i = 0; i < srcFiled.length; i++) {
                    // 拿到属性值,进行拷贝
                    srcFiled[i].setAccessible(true);
                    Object srcValueObj = srcFiled[i].get(srcObj);
                    
                    dirFiled[i].setAccessible(true);
                    dirFiled[i].set(dirObj, srcValueObj);
                }
                
                // 放入List集合
                obj.add(dirObj);
                
                k++;
            }
            
            // 放入Map集合
            returnInfo.put(key, obj);
        }
        return returnInfo;
    }
}

EmployInfo.javaapache

package org.apache.java.entity;

/**
 * 员工信息类
 * 
 * @ClassName: EmployInfo
 * @Description: 员工信息类
 * @author tyu_libo
 * @date 2014年12月20日 下午6:52:58
 * 
 */
public class EmployInfo{

    /**
     * 员工姓名
     */
    private String employName;

    /**
     * 员工号码
     */
    private String employNumber;

    /**
     * @return the employName
     */
    public String getEmployName() {
        return employName;
    }

    /**
     * @param employName
     *            the employName to set
     */
    public void setEmployName(String employName) {
        this.employName = employName;
    }

    /**
     * @return the employNumber
     */
    public String getEmployNumber() {
        return employNumber;
    }

    /**
     * @param employNumber
     *            the employNumber to set
     */
    public void setEmployNumber(String employNumber) {
        this.employNumber = employNumber;
    }

    /**
     * 
     * @Description:
     * @param employName
     * @param employNumber      
     * @throws
     */
    public EmployInfo(String employName,
                    String employNumber) {
        this.employName = employName;
        this.employNumber = employNumber;
    }

}

UserInfo.java数组

package org.apache.java.entity;

import java.io.Serializable;

/**
 * 用户信息Entity
 * 
 * @author Administrator
 *
 */
public class UserInfo implements Serializable{
	/**
	 * 
	 */
	private static final long serialVersionUID = -7947100192425556667L;
	private String userName;
	private String className;
	private String telNmuber;
	private String ipAddress;
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getClassName() {
		return className;
	}
	public void setClassName(String className) {
		this.className = className;
	}
	public String getTelNmuber() {
		return telNmuber;
	}
	public void setTelNmuber(String telNmuber) {
		this.telNmuber = telNmuber;
	}
	public String getIpAddress() {
		return ipAddress;
	}
	public void setIpAddress(String ipAddress) {
		this.ipAddress = ipAddress;
	}
	
	public UserInfo(){}
	public UserInfo(String userName, String className, String telNmuber,
			String ipAddress) {
		super();
		this.userName = userName;
		this.className = className;
		this.telNmuber = telNmuber;
		this.ipAddress = ipAddress;
	}
	
}