有一个Map集合,里面存放的是<String,int>类型的数据。
北京市_特点1 | 52 |
北京市_特点2 | 86 |
上海市_特点1 | 32 |
长沙市_特点3 | 78 |
武汉市_特点2 | 50 |
南京市_特点1 | 26 |
上海市_特点2 | 90 |
想把上述中的特点1、特点2、特点3变成城市的属性,变成Map<String,CityObj>类型,CityObj为对象,有属性特点1、特点2、特点3。
转换成:
城市 | 特点1 | 特点2 | 特点3 |
北京 | 52 | 86 | 0 |
上海 | 32 | 90 | 0 |
长沙 | 0 | 0 | 78 |
武汉 | 0 | 50 | 0 |
南京 | 26 | 0 | 0 |
代码实现:
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]]