思考: 定义一个Student类
属性有姓名,班号,成绩;现在将若干Student对象放入List,请统计出每个班级的总分和平均分;
方案: 面向对象+分拣存储(1:N)
- 学生类-Student
package hashmap.sortout.classscore;
public class Student {
/**学生类*/
private String name;//姓名
private String classNo;//班级编号
private double score;//成绩
public Student() {
}
public Student(String name, String classNo, double score) {
super();
this.name = name;
this.classNo = classNo;
this.score = score;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getClassNo() {
return classNo;
}
public void setClassNo(String classNo) {
this.classNo = classNo;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
}
- 班级类-Class
package hashmap.sortout.classscore;
import java.util.ArrayList;
import java.util.List;
public class Class {
private String classNo;//班级编号
private List<Student> stuList;//学生列表
private double total; //总分
public Class() {
stuList=new ArrayList<Student>();
}
public Class(String classNo) {
this();
this.classNo =classNo;
}
public Class(String classNo, List<Student> stuList, double total) {
super();
this.classNo = classNo;
this.stuList = stuList;
this.total = total;
}
public String getClassNo() {
return classNo;
}
public void setClassNo(String classNo) {
this.classNo = classNo;
}
public List<Student> getStuList() {
return stuList;
}
public void setStuList(List<Student> stuList) {
this.stuList = stuList;
}
public double getTotal() {
return total;
}
public void setTotal(double total) {
this.total = total;
}
}
- 实现类-ClassScoreImpl
package hashmap.sortout.classscore;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
*思考: 定义一个Student类,
属性:姓名,班号,成绩 现在将若干Student对象放入List,请统计出每个班级的总分和平均分
方案: 面向对象+分拣存储(1:N)
*/
public class ClassScoreImpl {
public static void main(String[] args) {
//1、考试
List<Student> stuList =exam();
//2、分析成绩
Map<String,Class> map =count(stuList);
//3、查看成绩(总分 平均分)
view(map);
}
/**
* 1.模拟考试,将测试数据存到List中
* @return
*/
public static List<Student> exam(){
List<Student> list =new ArrayList<Student>();
//存放学生成绩
list.add(new Student("老裴","a",85));
list.add(new Student("裴兜兜","a",86));
list.add(new Student("裴裴","a",89));
list.add(new Student("高小三","b",80));
list.add(new Student("高高","b",80));
return list;
}
/**
* 2.统计分析成绩
* 2.1 面向对象
* 2.2 分拣存储
*/
public static Map<String,Class> count(List<Student> list){
Map<String,Class> map =new HashMap<String,Class>();
//1、遍历List
for(Student stu:list){
String classNo =stu.getClassNo(); //班级编号
double score =stu.getScore(); //学号
//2、分拣查看是否存在该 编号的班级
//如果不存在,创建班级
Class newclass =map.get(classNo);
if(null==newclass){
newclass=new Class(classNo);
map.put(classNo, newclass);
}
//放入学生
newclass.getStuList().add(stu) ;//放入学生
newclass.setTotal(newclass.getTotal()+score); //计算总分
}
return map;
}
/**
* 3.查看每个班的总分和平均分 -->遍历 map
*/
public static void view(Map<String,Class> map){
Set<String> keyset =map.keySet();
//获取迭代器对象
Iterator<String> keyIterator =keyset.iterator();
//先判断
while(keyIterator.hasNext()){
//再获取
String key =keyIterator.next();
Class _class =map.get(key);
//查看总分 计算平均分
double total =_class.getTotal();
double avg =total/(_class.getStuList().size());
System.out.println(key+"-->"+total+"-->"+avg);
}
}
}