Map List的拼接实现输出整个学期的成绩单

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("小明");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值