资源描述:
《java用匿名类处理分类汇总》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、用匿名类处理分类汇总分类汇总是统计中常用,举例来说如统计学生成绩,及格不及格的归类,分优良中差等级归类等,每个单项代码很好写,但是如果分类汇总的项目多了,能一种汇总写一个函数吗?比如说有些科目60分才算及格,有些科目50分就算;有些老师喜欢分优良中差四等,有些老师却喜欢分ABCD;不一而足,如果每个都写一个函数无疑是个编写和维护恶梦. 如果我们用匿名类把分类汇总的规则和分类汇总的过程分别抽象出来,代码就清晰灵活多了,以下代码讲述了这个过程,代码比较简单,这里就不赘述了,相信大家都能看明白.首先是数据的基本类Student:public class Student{ private
2、 String name; private int score; public Student(String name,int score){ this.name=name; this.score=score; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getScore() { ret
3、urn score; } public void setScore(int score) { this.score = score; } }然后是用于分类汇总的类,它强制子类实现getKey和getvalue两个方法: public abstract class ClassifyRule { public Student student; public ClassifyRule(){ } public void setStudent(Student student) { this
4、.student = student; } abstract public String getKey()//汇总关键字 abstract public int getValue();//汇总的结果}接下来是对Student进行CRUD处理的StudentService类,注意getSum方法,它保留了筛选过程,筛选规则则不在其中:import java.util.ArrayList;import java.util.Hashtable;import java.util.List;public class StudentService { private L
5、ist students; public StudentService() { students = new ArrayList(); } public void add(Student student) { students.add(student);//添加学生 } public Hashtable getSum(ClassifyRule rule) {//根据汇总法则筛选学生 Hashtable ht = ne
6、w Hashtable(); for (Student student : students) { rule.setStudent(student); String key = rule.getKey(); int value = rule.getValue(); if (ht.containsKey(key)) { Integer oldValue = ht.remove(key); oldVa
7、lue += value; ht.put(key, oldValue); } else { ht.put(key, value); } } return ht; }}最后是测试代码,注意其中筛选规则的创建:import java.util.Hashtable;import java.u