首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Java排序(灵便定义排序策略)

2013-03-25 
Java排序(灵活定义排序策略)项目中的一个实际需求,对于数据库中的信息,不同的查询要求以不同的排序方式来

Java排序(灵活定义排序策略)
项目中的一个实际需求,对于数据库中的信息,不同的查询要求以不同的排序方式来展示; 抽象成下面的问题进行解决;

问题描述:
学校的学生信息,包含以下属性:ID、姓名、所在城市、成绩;
所有学校的学生信息统一存放,但不同学校查询信息时要求按照不同的排序策略显示,如何编写统一的排序方法满足这种需求;
学生信息如下所示(简单起见,保存在一个properties文件中):
记录=ID,姓名,所在城市,成绩
stu01=001,zhangsan,xian,90
stu02=002,zhangsan,nanjing,85
stu03=002,zhangsan,beijing,90
stu04=002,lisi,shanghai,90
stu05=003,wangwu,guangdong,95
stu06=004,qianqi,xinjiang,60

问题解决:
将问题分解为下面散步来循序渐进的解决;

1.学生具有ID、姓名两个属性,要求先按照ID排序,ID相同的按照姓名排序;
这是一个比较典型的java排序问题,首先创建一个CommonStudent的Bean类;
实现比较算法如下:

    public static void main(String[] args) throws IOException    {        //普通情况的排序        List<CommonStudent> commonList = initCommonList();        Collections.sort(commonList, new CommonComp());        print(commonList);                //信息丰富的学生排序        List<EnrichStudent> enrichList = initComplicateList();        Collections.sort(enrichList, new EnrichComp());        print(enrichList);                //更加通俗的排序        List<EnrichStudent> complicateList = initComplicateList();        List<String> keys = new ArrayList<String>();        keys.add("id");        keys.add("name");        keys.add("count");        Collections.sort(complicateList, new ComplicateComp(keys));        print(complicateList);    }

展示了其中的一种排序策略:按照ID、姓名、成绩排序,结果如下:
No.0: id = 001 name = zhangsan attributes = {id=001, count=90, address=xian, name=zhangsan}
No.1: id = 002 name = lisi attributes = {id=002, count=90, address=shanghai, name=lisi}
No.2: id = 002 name = zhangsan attributes = {id=002, count=85, address=nanjing, name=zhangsan}
No.3: id = 002 name = zhangsan attributes = {id=002, count=90, address=beijing, name=zhangsan}
No.4: id = 003 name = wangwu attributes = {id=003, count=95, address=guangdong, name=wangwu}
No.5: id = 004 name = qianqi attributes = {id=004, count=60, address=xinjiang, name=qianqi} 1 楼 carry_tang1978 2013-03-18   为什么不在数据库排序,难道楼主把所有数据读到内存排序? 2 楼 tan4836128 2013-03-18   没看出个所以然啊,楼主想表达什么主题呢? 3 楼 CrystalCoding 2013-03-18   对于这个问题本身而言,数据库排序就已经可以解决问题了;
项目中的需求实现使用了CMDB,也就是在系统安装部署之前,是不知道数据库中会有什么字段的这种场景;
例子只是对于这种场景的一个抽象,可能没表达好~~~

热点排行