黑马程序员技术交流社区

标题: 如何依据对象中的数据对集合中的对象排序 [打印本页]

作者: 刘国强    时间: 2013-4-10 02:26
标题: 如何依据对象中的数据对集合中的对象排序
本帖最后由 刘国强 于 2013-4-11 00:58 编辑

多个学生成绩的对象,添加到list集合后,如何根据需要,根据不同的成绩排名,对list集合进行排序
学生成绩的bean代码:

  1. public class StuScoreAll {
  2.         
  3.         private String stuid;
  4.         private String stuname;
  5.         private int math_1;
  6.         private int math_2;
  7.         private int lage_1;
  8.         private int lage_2;
  9.         private int english_1;
  10.         private int english_2;
  11.         private int pscore_1;
  12.         private int pscore_2;
  13.         private int fscore_1;
  14.         private int fscore_2;
  15.         private int zscore_1;
  16.         private int zscore_2;
  17.         private int zscore;
  18.         public int getZscore_1() {
  19.                 return zscore_1;
  20.         }
  21.         public void setZscore_1(int zscore_1) {
  22.                 this.zscore_1 = zscore_1;
  23.         }
  24.         public int getZscore_2() {
  25.                 return zscore_2;
  26.         }
  27.         public void setZscore_2(int zscore_2) {
  28.                 this.zscore_2 = zscore_2;
  29.         }
  30.         public int getZscore() {
  31.                 return zscore;
  32.         }
  33.         public void setZscore(int zscore) {
  34.                 this.zscore = zscore;
  35.         }
  36.         public String getStuid() {
  37.                 return stuid;
  38.         }
  39.         public void setStuid(String stuid) {
  40.                 this.stuid = stuid;
  41.         }
  42.         public String getStuname() {
  43.                 return stuname;
  44.         }
  45.         public void setStuname(String stuname) {
  46.                 this.stuname = stuname;
  47.         }
  48.         public int getMath_1() {
  49.                 return math_1;
  50.         }
  51.         public void setMath_1(int math_1) {
  52.                 this.math_1 = math_1;
  53.         }
  54.         public int getMath_2() {
  55.                 return math_2;
  56.         }
  57.         public void setMath_2(int math_2) {
  58.                 this.math_2 = math_2;
  59.         }
  60.         public int getLage_1() {
  61.                 return lage_1;
  62.         }
  63.         public void setLage_1(int lage_1) {
  64.                 this.lage_1 = lage_1;
  65.         }
  66.         public int getLage_2() {
  67.                 return lage_2;
  68.         }
  69.         public void setLage_2(int lage_2) {
  70.                 this.lage_2 = lage_2;
  71.         }
  72.         public int getEnglish_1() {
  73.                 return english_1;
  74.         }
  75.         public void setEnglish_1(int english_1) {
  76.                 this.english_1 = english_1;
  77.         }
  78.         public int getEnglish_2() {
  79.                 return english_2;
  80.         }
  81.         public void setEnglish_2(int english_2) {
  82.                 this.english_2 = english_2;
  83.         }
  84.         public int getPscore_1() {
  85.                 return pscore_1;
  86.         }
  87.         public void setPscore_1(int pscore_1) {
  88.                 this.pscore_1 = pscore_1;
  89.         }
  90.         public int getPscore_2() {
  91.                 return pscore_2;
  92.         }
  93.         public void setPscore_2(int pscore_2) {
  94.                 this.pscore_2 = pscore_2;
  95.         }
  96.         public int getFscore_1() {
  97.                 return fscore_1;
  98.         }
  99.         public void setFscore_1(int fscore_1) {
  100.                 this.fscore_1 = fscore_1;
  101.         }
  102.         public int getFscore_2() {
  103.                 return fscore_2;
  104.         }
  105.         public void setFscore_2(int fscore_2) {
  106.                 this.fscore_2 = fscore_2;
  107.         }
  108. }
复制代码

作者: 张子凯    时间: 2013-4-10 08:40
本帖最后由 张子凯 于 2013-4-10 08:44 编辑
  1. private String stuid;
  2.         private String stuname;
  3.         private int math_1;
  4.         private int math_2;
  5.         private int lage_1;
  6.         private int lage_2;
  7.         private int english_1;
  8.         private int english_2;
  9.         private int pscore_1;
  10.         private int pscore_2;
  11.         private int fscore_1;
  12.         private int fscore_2;
  13.         private int zscore_1;
  14.         private int zscore_2;
  15.         private int zscore;
复制代码
建议你把这些变量都标上中文意思,因为zscore_1 ,zscore_2是总分的意思吗?上边几个score又是什么?    private int math_1;
        private int math_2;是分数还是数学课程名称?还是课程代码?别人都看不懂
按照分数排序,你可以建一个实现Comparator接口的类,然后用Collections中的sort函数来排序,不过复写compare时,代码要健壮一些,就是说首先比总分,然后比其他分,最后都相同可以比学生ID。。。。
class StuScoreComparator implements Comparator<StuScoreAll>r{}
Collections.sort(List<StuScoreAll>,new StuScoreComparator<StuScoreAll>)
作者: 李永康    时间: 2013-4-10 11:07
你这个太复杂了 ,你可以写个简单的,实现Comparator接口。
作者: 王军行    时间: 2013-4-10 16:51
本帖最后由 王军行 于 2013-4-10 16:56 编辑

类 Collections的方法

static <T> void sort(List<T> list, Comparator<? super T> c)
          根据指定比较器产生的顺序对指定列表进行排序。
,你可以按照你的需求排序的成员属性写个比较器,
用比较器排序就可以了。
作者: 蓝色骨头    时间: 2013-4-10 19:29

多个学生成绩的对象,添加到list集合后,如何根据需要,根据不同的成绩排名,对list集合进行排序?
使用Collections 的sort方法 static <T> void sort(List<T> list, Comparator<? super T> c)
使用的时候new 一个Comparator的内部类,根据使用哪个成绩进行比较就行了。如
                ArrayList<StuScoreAll > arratList = new ArrayList<StuScoreAll >();
                arratList.add(new StuScoreAll());
                ……

                Collections.sort(arratList, new Comparator<StuScoreAll>(){

                        @Override
                        public int compare(StuScoreAll o1, StuScoreAll o2) {
                                // TODO Auto-generated method stub
                                return Integer.compare(o1.getZscore(), o2.getZscore());
                        }
                    
                });

作者: 刘国强    时间: 2013-4-11 00:57
已经解决,谢谢各位的回答




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2