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 +
'}';
}
}
MAP集合练习05
最新推荐文章于 2022-06-27 09:02:08 发布