Map list的拼接
上学期小明,小红在,下学期小明转走了,小张入学了,将整个学期的成绩单输出
package maplist;
import java.util.*;
public class TestQuestionList {
public static void main(String[] args) {
TestQuestionList testQuestion = new TestQuestionList();
testQuestion.excute();
}
public void excute(){
List<Map<String,Object>> onelist = one();
/**
* [ {name=xx , yishu = aa , ...} , {name=yy , yishu = bb} ]
*/
List<Map<String,Object>> twolist = two();
/**
* [ {name=xx , ershu = aa , ...} , {name=yy , ershu = bb} ]
*/
Map<String, Map<String,Object>> addlist = merge(onelist,twolist);
/**
* [ {name=xx , yishu=aa , ershu = aa2 , yiyu... } , {name=yy .... } ]
*/
out(addlist);
}
/*
第一学期的成绩
*/
private List<Map<String,Object>> one(){
List<Map<String,Object>> result = new ArrayList<Map<String,Object>>();
Map<String, Object> xiaoming = new HashMap<String, Object>();
xiaoming.put("name","小明");
xiaoming.put("第一学期数学",80);
xiaoming.put("第一学期语文",40);
Map<String, Object> xiaohong = new HashMap<String, Object>();
xiaohong.put("name","小红");
xiaohong.put("第一学期数学",70);
xiaohong.put("第一学期语文",90);
result.add(xiaohong);
result.add(xiaoming);
return result;
}
private List<Map<String,Object>> two(){
List<Map<String,Object>> result2 = new ArrayList<Map<String,Object>>();
Map<String,Object> xiaohong2 = new HashMap<String,Object>();
xiaohong2.put("name","小红");
xiaohong2.put("第二学期数学",85);
xiaohong2.put("第二学期语文",85);
Map<String,Object> xiaoming2 = new HashMap<String,Object>();
xiaoming2.put("name","小张");
xiaoming2.put("第二学期数学",90);
xiaoming2.put("第二学期语文",70);
result2.add(xiaohong2);
result2.add(xiaoming2);
return result2;
}
public Map<String, Map<String,Object>> merge(List<Map<String,Object>> a/*指针*/,List<Map<String,Object>> t) {
// List<Map<String, Object>> addlist = new ArrayList<Map<String, Object>>();
//第一学期成绩
/*List<Map<String,Object>> a = one();*/
//第二学期成绩
/*List<Map<String,Object>> t = two();*/
//add要存3个人的信息,MapLe类型 key="名字" value="成绩"
Map<String, Map<String,Object>> add = new HashMap<String, Map<String,Object>>();
// { "小明" = {name=xx , yishu = aa , ...} , “小红” = {name=yy , yishu = bb} "小张"{} }
//循环了第一学期成绩,获取他的名字,根据名字把成绩填入 add中
for ( Map<String,Object> v : a ){
String name = v.get("name").toString();
add.put(name , v );
}
//循环了第二学期的成绩,获取名字,去小红第二学期成绩 ,将一二学期拼接
for (int i =0 ; i < t.size() ; i++){
/*获取集合*/
Map<String,Object> two = t.get(i); // {小红 二成绩,2成绩}
/*把"name"当key取出来,本身为String 类型不用转型,直接.toString()就可以*/
String name = two.get("name").toString(); // "小红"
/*按照名字取出小红的成绩*/
/*名字存在做判断*/
if(add.containsKey(name)){
//小红
Map<String,Object> qw = add.get(name);
qw.putAll(two); //第二学期合并到 总成绩单中
}else {
add.put(name,two);
/*根据名字把第二学期成绩填入总成绩单中*/
}
}
return add;
}
public void out( Map<String, Map<String,Object>> z ){
String[] headerArr = new String[]{"name","第一学期数学","第一学期语文","第二学期数学","第二学期语文"};
/*for循环遍历String数组中的元素*/
for(int i = 0;i<headerArr.length;i++){
System.out.print(headerArr[i] + "\t");
}
System.out.println();
/*遍历总成绩单,获得3个人的名字。也就是key,按照相应的key寻找对应的成绩*/
for( String name : z.keySet() ){
// System.out.print( name );
Map<String,Object> x = z.get(name);
for( String oneheader : headerArr ){
System.out.print( ( x.containsKey(oneheader) ? x.get(oneheader) : "--") + "\t" );
}
System.out.println();
}
//System.out.println("小明");
}
}