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中对象的保存顺序就是按照跑步的距离按照从大到小的顺序排好了。