【问题标题】:sorting (constructor) in Java [closed]Java中的排序(构造函数)[关闭]
【发布时间】:2011-12-11 21:22:21
【问题描述】:

例如,我有两个对象:

Icecream ice1 = new Icecream(vanilla, newDate(11, 09, 09));
Icecream ice2 = new Icecream(choko, newDate(10, 08, 08));
// where first argument is a String and second argument is a Date 

我怎样才能打印出来,以便从最早的日期开始订购? (toStrign 方法已经配置好了)

输出应该是:

Vanilla, 10-08-08
Vanilla, 11-09-09

谢谢!

【问题讨论】:

标签: java sorting constructor


【解决方案1】:

实现您自己的比较器并在集合上调用 sort。例如,好的教程在这里:

Java Sorting: Comparator vs Comparable Tutorial

【讨论】:

  • +1,用于链接到教程而不是用勺子喂答案。
【解决方案2】:

您可以通过实现Comparator 接口为您的类IceCream 定义自然排序。

public class IceCream implements Comparator{
    // ...
    final String name; 
    final Date date;
    public Icecream(String name, Date date){
       this.name = name;
       this.date = date;
    }
    public int compare(Object o1, Object o2) {
        return ((IceCream)o1).date.compareTo(((IceCream)o2).date);
    }
}

【讨论】:

  • 如果不难,请说明如何
  • @user1091510 请看我的编辑
  • 我知道有人会用勺子喂你的答案!学习搜索技巧就这么多。
  • 这个答案是错误的:你要实现Comparable接口,而不是Comparator。在任何一种情况下,您都应该使用参数化类型,而不是原始类型,所以它应该是public class IceCream implements Comparable<IceCream>
【解决方案3】:

为您的 Icecream 类制作自定义比较器。

class DateComparator implements Comparator {

    public int compare(Object ic1, Object ic22){

        /*
         * parameter are of type Object, so we have to downcast it
         * to Icecream objects
         */

        Date ic1Date = ((Icecream)ic1).getDate();        
        Date ic2Date = ((Icecream)ic2).getDate();

        return ic1Date.compareTo(ic2Date);   
    }
}

【讨论】:

    【解决方案4】:

    我会创建两个类,一个实现 Comparator 和一个 Sorter 处理数组排序,比较器作为参数。然后将冰淇淋放入一个数组中,并在 Sorter 中调用你的排序方法。

    【讨论】:

      猜你喜欢
      • 2018-05-06
      • 2011-11-05
      • 2013-08-26
      • 1970-01-01
      • 2014-11-20
      • 1970-01-01
      • 1970-01-01
      • 2020-06-04
      • 2012-09-07
      相关资源
      最近更新 更多