java中Comparator的用法

在java中,如果要对集合对象或数组对象进行排序,需要实现Comparator接口以达到我们想要的目标。

接下来我们通过对一个跑步者对象中的跑步距离属性排序来说明

一、实体类Runner

 1 package com.runner;
 2 
 3 public class Runner {
 4 
 5     private Long userid;
 6     private double kilometre;
 7     private int rank;
 8 
 9     public Runner() {
10     }
11 
12     public Runner(Long userid, double kilometre) {
13         this.userid = userid;
14         this.kilometre = kilometre;
15     }
16 
17     public Long getUserid() {
18         return userid;
19     }
20 
21     public void setUserid(Long userid) {
22         this.userid = userid;
23     }
24 
25     public double getKilometre() {
26         return kilometre;
27     }
28 
29     public void setKilometre(double kilometre) {
30         this.kilometre = kilometre;
31     }
32 
33     public int getRank() {
34         return rank;
35     }
36 
37     public void setRank(int rank) {
38         this.rank = rank;
39     }
40 }

二、实现Compartor接口

我们可以选择让一个类实现Compartor接口,然后覆写compare方法,也可以采取下面的方式,实际上也是先实现接口,后创建实例,只是写法不一样。

 1 initrun = new ArrayList<Runner>();
 2                 initrun = RunnerServiceBean.getFriendScore(list);
 3                 // 判断是否好友成绩是0,是则不予排序返回
 4                 secrun = new ArrayList<Runner>();
 5                 for (Runner ru1 : initrun) {
 6                     if (ru1.getKilometre() != 0) {
 7                         secrun.add(ru1);
 8                     }
 9                 }
10                 secrun.add(runner);
11                 // 如果不止一个人则排序
12                 if (secrun.size() != 1) {
13                     // 按照跑步的距离从大到小排序
14                     Comparator<Runner> comparator = new Comparator<Runner>() {
15                         public int compare(Runner r1, Runner r2) {
16                             if (r1.getKilometre() != r2.getKilometre()) {
17                                 return (int) (r2.getKilometre() - r1
18                                         .getKilometre());
19                             } else {
20                                 return 0;
21                             }
22                         }
23                     };
24                     Collections.sort(secrun, comparator);
25                 }

其中:initrun是一个保存Runner对象的List集合。

这样最后initrun中对象的保存顺序就是按照跑步的距离按照从大到小的顺序排好了。

 

posted on 2014-03-27 15:09  李俊伟  阅读(266)  评论(0编辑  收藏  举报

导航