7

我有大约 8 个日期变量(java.util.Date)具有不同的变量名。选择这些日期的最新(最大值)的最有效/最佳方式是什么?

4

5 回答 5

22

理想情况下,将它们存储在一个集合中——无论如何,这对你的程序设计来说可能是有意义的。如果你有一个 List 对象,你可以这样做:

Collections.max(dates);
于 2012-04-12T17:15:37.800 回答
6

将它们放在 List 中并使用Collections.max.

于 2012-04-12T17:15:40.190 回答
4

由于您将所有日期存储在不同的变量中,因此您需要执行以下 varargs 函数并将所有变量传递给它:

protected Date getMostRecentDate(Date ... dates) {
    Arrays.sort(dates);
    return myDateArray[dates.length - 1];
}

然后你会这样称呼它:

Date mostRecent = getMostRecentDate(date1, date2, date3 /* etc.*/);
于 2012-04-12T17:15:57.000 回答
3

Date具有可比性,因此将它们全部添加到列表中,并用于Collections.max()查找最大(最新)日期:

List<Date> dates = new ArrayList<Date>();
dates.add(foo);
dates.add(bar);
... etc
Date latest = Collections.max(list);

实际上,如果你想变得花哨,你可以这样做:

public static <T extends Comparable<T>> T max(T... items) {
    return Collections.max(Arrays.asList(items));
}

并这样称呼它:

Date latest = MyClass.max(foo, bar, fred);

但它也适用于任何Comparable

Integer biggest = MyClass.max(3, 7, 4, 1);
于 2012-04-12T17:15:20.560 回答
1

将它们全部添加到集合中然后对其进行排序,或者将它们添加到首先排序的集合中,例如 PriorityQueue:

PriorityQueue<Date> dateQ = new PriorityQueue<Date>();
dateQ.add(someDate);
dateQ.add(anotherDate);
dateQ.add(thirdDate); // etc...
System.out.println("Max date is: " + dateQ.peek());
于 2012-04-12T17:16:37.580 回答