MAP集合练习05

package demo;
import java.util.*;
/*
* 扩展题目:
   class Student(){
      private String name;
      private Integer age;
      private Boolean sex; //true-男
      private Double score;
      //省略无参数、有参数的构造方法...
      //省略get/set
   }
   1班学生:name:zhangsan     age:18   ...
            name:lisi            age:21   ...
          name:wangwu           age:25   ...
    2班学生:
         name:Tom       age:20   ...
            name:John         age:22   ...
           name:Lucy          age:26   ...
    3班学生:
         name:rc            age:19   ...
            name:mq            age:23   ...
           name:Lucy          age:28   ...
        完成以下要求:
   ① 利用Map,以班级号作为键(String类型),全班的学生作为值,描述以上所有班级信息。Map<String,List<Student>>
   ② 将Map中班级对应的班级学生信息输出。
   ③ 打印输出每一个班级的平均分数.
   ④ 统计所有班级的女生的人数,并打印输出.
* */
public class Test05 {
    public static void main(String[] args) {
        //利用Map,以班级号作为键(String类型),全班的学生作为值,描述以上所有班级信息。Map<String,List<Student>>
        //有三个班级
        // 因为一个班级有多个学生对象,而且不清楚要添加多少个,
        // 所以需要一个可以存储对象的 长度可变的容器来进行储存 list集合
        //三个班级 需要三个list集合
        //创建list集合 泛型存储Student类型的对象
        List<Student> studentList = new ArrayList<>();//一班学生的集合
        //为存储一班的集合添加元素
        studentList.add(new Student("zhangsan",18,true,50D));
        studentList.add(new Student("lisi",21,false,60d));
        studentList.add(new Student("wangwu",25,true,95D));

        //创建第二个list集合
        List<Student> studentList1 = new ArrayList<>();
        //为存储二班的集合添加元素
        studentList1.add(new Student("Tom",20,true,65D));
        studentList1.add(new Student("John",22,false,75D));
        studentList1.add(new Student("Lucy",26,true,85D));

        //创建第三个list集合
        List<Student> studentList2 = new ArrayList<>();
        //为存储三班的集合添加元素
        studentList2.add(new Student("rc",19,true,75D));
        studentList2.add(new Student("mp",23,true,66D));
        studentList2.add(new Student("Lucy",28,false,99D));

        //利用Map,以班级号作为键(String类型),全班的学生作为值,描述以上所有班级信息。Map<String,List<Student>>
        //创建map集合
        Map<String,List<Student>> map = new HashMap<>();
        //为map集合中添加元素
        map.put("1",studentList);
        map.put("2",studentList1);
        map.put("3",studentList2);

        // ② 将Map中班级对应的班级学生信息输出。
        //遍历map集合 使用键值对来匹配
        Set<Map.Entry<String,List<Student>>> mapStudent = map.entrySet();
        //遍历创建的键值对对象
        for (Map.Entry<String, List<Student>> stringListEntry : mapStudent) {
            //得到遍历后的每一个key值
            String str = stringListEntry.getKey();
            //得到遍历后的每一个value值
            List<Student> list = stringListEntry.getValue();
            //打印遍历出来的每一个元素
            System.out.println(str+"  "+list);
        }
        System.out.println("------------------------------------------------------------");
        //③ 打印输出每一个班级的平均分数.
        //定义一个计数器,用来统计女生的数量
        int count = 0;
        //使用值遍历 获取map集合中 每一个值元素
        //创建键值对遍历对象
        for (Map.Entry<String, List<Student>> stringListEntry : mapStudent) {
            //定义计算分数和的变量
            double sum = 0;
            //如果值是1班学生
            if (stringListEntry.getKey().equals("1")){
                //得到遍历出来的每一个map集合中的value值
                List<Student> value = stringListEntry.getValue();
                //因为每一个map集合中的value的值 是一个student类型的list集合
                //想要得到student对象里面的属性 就需要遍历list集合
                for (Student student : value) {
                    //拿到list集合中每一个student对象中的代表分数的属性值
                    //想要求出平均值 需要先求出所有student对象的分数的总和
                    sum += student.getScore();
                }
                //使用student对象的分数的总和 除以 存储一班学生的list集合的有效元素数量
                //求出平均值
                System.out.println(" 1班级平均值 "+sum/value.size());
            }
            if (stringListEntry.getKey().equals("2")){

                List<Student> value = stringListEntry.getValue();
                //遍历list集合
                for (Student student : value) {
                    sum += student.getScore();
                }
                System.out.println(" 2班级平均值 "+sum/value.size());
            }
            if (stringListEntry.getKey().equals("3")){

                List<Student> value = stringListEntry.getValue();
                //遍历list集合
                for (Student student : value) {
                    sum += student.getScore();
                }
                System.out.println(" 3班级平均值 "+sum/value.size());
            }
        }
        //④ 统计所有班级的女生的人数,并打印输出.
        //运用值遍历
        Collection<List<Student>> studentCollection = map.values();
        //遍历集合
        for (List<Student> list : studentCollection) {
            //遍历list集合
            for (Student student : list) {
                //判断如果list集合中的student对象中有性别属性是false的
                if (student.getSex()==false){
                    //那么就把这个学生的属性打印出来
                    System.out.println(" 女生的信息: "+student);
                    //将用来计算女生数量的变量+1;
                    count++;
                }
            }
        }
        //打印输出女生计算后的总数。
        System.out.println(" 三个班级中有 "+count+" 位女生 ");
    }
}
class Student{
    private String name;
    private Integer age;
    private Boolean sex; //true-男
    private Double score;

    public Student() {
    }

    public Student(String name, Integer age, Boolean sex, Double score) {
        this.name = name;
        this.age = age;
        this.sex = sex;
        this.score = score;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Boolean getSex() {
        return sex;
    }

    public void setSex(Boolean sex) {
        this.sex = sex;
    }

    public Double getScore() {
        return score;
    }

    public void setScore(Double score) {
        this.score = score;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex=" + sex +
                ", score=" + score +
                '}';
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值