Map中的value为对象

本文介绍了一种将原始Map<String,Integer>转换为Map<String,CityObj>的方法,其中CityObj是一个包含特定城市不同特征值的对象。通过示例代码展示了如何根据城市名称和特征标签进行数据重组,最终实现对数据的有效管理和利用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有一个Map集合,里面存放的是<String,int>类型的数据。

北京市_特点152
北京市_特点286
上海市_特点132
长沙市_特点378
武汉市_特点250
南京市_特点126
上海市_特点290

想把上述中的特点1、特点2、特点3变成城市的属性,变成Map<String,CityObj>类型,CityObj为对象,有属性特点1、特点2、特点3。

转换成:

城市特点1特点2特点3
北京52860
上海32900
长沙0078
武汉0500
南京2600

代码实现:

import java.util.HashMap;
import java.util.Map;

/** 
 * @author  
 * @date 2018年4月10日 上午11:30:24 
 * @version 1.0 
 * @parameter  
 * @since  
 * @return  
 */
public class TestMap {
	public static class CityObj{
		public String city;
		public int level1;
		public int level2;
		public int level3;
		public void setValue(String level,int value) {
			if (level.equals("特点1")) {
				this.level1=value;
			}else if (level.equals("特点2")) {
				this.level2=value;
			}else if (level.equals("特点3")) {
				this.level3=value;
			}
		}

//		@Override
//		public String toString() {
//			return "CityObject [values=" + Arrays.toString(values) + "]";
//		}
	}
	
	public static void main(String[] args) {  
		Map<String, Integer> rMap = new HashMap<>();
		Map<String, CityObj> resMap = new HashMap<>();
                rMap.put("北京市_特点1",  52);  
                rMap.put("北京市_特点2",  86);  
                rMap.put("上海市_特点1",  32);  
                rMap.put("长沙市_特点3",  78);  
                rMap.put("武汉市_特点2",  50);  
                rMap.put("南京市_特点1",  26);  
                rMap.put("上海市_特点2",  90);  
                for (Map.Entry<String, Integer> entry : rMap.entrySet()) {  
                    System.out.println(entry.getKey() + '\t' + entry.getValue());  
                }  
                  System.out.println();
                for (Map.Entry<String, Integer> entry : rMap.entrySet()) {  
                    String key = entry.getKey();  
                    int count = entry.getValue();  
  
                    int p = key.indexOf("_");  
                    if (p >= 0) {  
                        String newKey = key.substring(0, p);  
                        String level = key.substring(p + 1);  
                        System.out.println("level:" + '\t' + level);  
                        if (resMap.containsKey(newKey)) {  
                            CityObj cityObj = resMap.get(newKey);  
                            cityObj.setValue(level, count);  
                        } else {  
                            CityObj cityObj = new CityObj();  
                            cityObj.setValue(level, count);  
                            resMap.put(newKey, cityObj);  
                        }  
                    }  
                }  
                    for (Map.Entry<String, CityObj> entry : resMap.entrySet()) {  
                        System.out.println(entry.getKey() + '\t' + entry.getValue().level1+ '\t' + entry.getValue().level2+ '\t' + entry.getValue().level3);  
            }  
    }
}

输出结果:

北京市_特点1	52
上海市_特点2	90
南京市_特点1	26
武汉市_特点2	50
北京市_特点2	86
上海市_特点1	32
长沙市_特点3	78

长沙市	0	0	78
上海市	32	90	0
北京市	52	86	0
南京市	26	0	0
武汉市	0	50	0

或者:

import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;

class CityObject{
	private int [] values = new int[4];

	public int[] getValues() {
		return values;
	}

	public void setValueAt(int index, int value) {
		if (index < 0 || index > 3) {
			return;
		}
		this.values[index] = value;
	}

	@Override
	public String toString() {
		return "CityObject [values=" + Arrays.toString(values) + "]";
	}
	
	
	
}

public class Main{
	
	public static HashMap<String, Integer> cityMaps = new HashMap<>();
	public static HashMap<String, CityObject> cityMaps2 = new HashMap<>();
	
	static {
		cityMaps.put("上海市_0", 30);
		cityMaps.put("上海市_1", 40);
		cityMaps.put("北京市_2", 50);
		cityMaps.put("长沙市_2", 80);
		cityMaps.put("海南市_3", 90);
		cityMaps.put("昆明市_1", 20);
		cityMaps.put("武汉市_2", 10);
	}
	
	public static void convert() {
		Iterator<Entry<String, Integer>> iter = cityMaps.entrySet().iterator();
		while (iter.hasNext()) 
		{
			Map.Entry entry = (Map.Entry) iter.next();
			String key = (String)entry.getKey();
			int val = (int) entry.getValue();
			
			
			String[] subKeys = key.split("_");
			
			String newKey = subKeys[0];
			int cityObjIndex = Integer.valueOf(subKeys[1]);
			
			if (cityMaps2.containsKey(newKey)) {
				CityObject object = cityMaps2.get(newKey);
				object.setValueAt(cityObjIndex, val);
			}else {
				CityObject object = new CityObject();
				object.setValueAt(cityObjIndex, val);
				cityMaps2.put(newKey, object);
			}
			
		}
	}
	
	public static void output() 
	{
		Iterator<Entry<String, CityObject>> iter = cityMaps2.entrySet().iterator();
		while (iter.hasNext()) 
		{
			Map.Entry entry = (Map.Entry) iter.next();
			String key = (String)entry.getKey();
			CityObject val = (CityObject)entry.getValue();
			
			System.out.println("key = "+key + ",value = " + val.toString());
		}
	}
	public static void main(String[] args) {
		convert();
		output();
	}
}

输出结果:

key = 昆明市,value = CityObject [values=[0, 20, 0, 0]]
key = 长沙市,value = CityObject [values=[0, 0, 80, 0]]
key = 海南市,value = CityObject [values=[0, 0, 0, 90]]
key = 上海市,value = CityObject [values=[30, 40, 0, 0]]
key = 北京市,value = CityObject [values=[0, 0, 50, 0]]
key = 武汉市,value = CityObject [values=[0, 0, 10, 0]]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值