首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >java比较器,如何按整数排序?

java比较器,如何按整数排序?
EN

Stack Overflow用户
提问于 2012-05-23 04:37:42
回答 3查看 203K关注 0票数 47

我正在尝试学习java中的比较器,我在网上找到了这个很好的例子,我的问题是如何改变这个代码,使宠物的名字按年龄和降序排序,最大的在前,最小的在后?

代码语言:javascript
复制
class Dog implements Comparator<Dog>, Comparable<Dog>{
private String name;
private int age;
Dog(){
}

Dog(String n, int a){
  name = n;
  age = a;
}

public String getDogName(){
  return name;
}

public int getDogAge(){
  return age;
}

// Overriding the compareTo method
public int compareTo(Dog d){
  return (this.name).compareTo(d.name);
}

// Overriding the compare method to sort the age 
public int compare(Dog d, Dog d1){
  return d.age - d1.age;
}
}

public class Example{
public static void main(String args[]){
  // Takes a list o Dog objects
  List<Dog> list = new ArrayList<Dog>();

  list.add(new Dog("Shaggy",3));
  list.add(new Dog("Lacy",2));
  list.add(new Dog("Roger",10));
  list.add(new Dog("Tommy",4));
  list.add(new Dog("Tammy",1));
  Collections.sort(list);// Sorts the array list

  for(Dog a: list)//printing the sorted list of names
     System.out.print(a.getDogName() + ", ");

  // Sorts the array list using comparator
  Collections.sort(list, new Dog());
  System.out.println(" ");
  for(Dog a: list)//printing the sorted list of ages
     System.out.print(a.getDogName() +"  : "+
     a.getDogAge() + ", ");
}
}
EN

回答 3

Stack Overflow用户

发布于 2015-05-13 15:49:31

代码语言:javascript
复制
public class DogAgeComparator implements Comparator<Dog> {
    public int compare(Dog o1, Dog o2) {
        return Integer.compare(o1.getAge(), o2.getId());
    }
}
票数 27
EN

Stack Overflow用户

发布于 2017-04-19 21:59:22

在Java 8中,您可以使用:

代码语言:javascript
复制
Comparator.comparingInt(Dog::getDogAge).reversed();
票数 21
EN

Stack Overflow用户

发布于 2012-05-23 05:03:26

一种简单的方法是

代码语言:javascript
复制
Comparator<Dog> ageAscendingComp = ...;
Comparator<Dog> ageDescendingComp = Collections.reverseOrder(ageAscendingComp);
// then call the sort method

另外,狗真的不应该实现Comparator。这意味着你必须做一些奇怪的事情,比如

代码语言:javascript
复制
Collections.sort(myList, new Dog("Rex", 4));
// ^-- why is a new dog being made? What are we even sorting by?!
Collections.sort(myList, myList.get(0));
// ^-- or perhaps more confusingly

相反,您应该将Compartors作为单独的类。

例如:

代码语言:javascript
复制
public class DogAgeComparator implments Comparator<Dog> {
    public int compareTo(Dog d1, Dog d2) {
        return d1.getAge() - d2.getAge();
    }
}

这有一个额外的好处,即您可以使用类名来说明比较器将如何对列表进行排序。例如:

代码语言:javascript
复制
Collections.sort(someDogs, new DogNameComparator());
// now in name ascending order

Collections.sort(someDogs, Collections.reverseOrder(new DogAgeComparator()));
// now in age descending order

你也不应该让Dog实现ComparableComparable接口用于表示存在某种固有的、自然的方式来对这些对象进行排序(例如对数字和字符串进行排序)。现在,这不是狗对象的情况,因为有时您可能希望按年龄排序,有时您可能希望按名称排序。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10709803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档