У меня есть около 8 переменных даты (java.util.Date) с разными именами переменных. Какой самый эффективный/лучший способ выбрать самую последнюю (максимальную) из этих дат?
Как получить самый последний набор переменных даты в java
Ответы (5)
В идеале храните их в коллекции — в любом случае это может иметь смысл с точки зрения дизайна вашей программы. Если у вас есть, например. объект списка, вы можете сделать:
Collections.max(dates);
Поместите их в список и используйте Collections.max
.
Поскольку вы храните все свои даты в разных переменных, вам нужно сделать что-то вроде следующей функции varargs и передать ей все ваши переменные:
protected Date getMostRecentDate(Date ... dates) {
Arrays.sort(dates);
return myDateArray[dates.length - 1];
}
Тогда вы бы назвали это так:
Date mostRecent = getMostRecentDate(date1, date2, date3 /* etc.*/);
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);
Добавьте их все в коллекцию, а затем отсортируйте ее или добавьте их в коллекцию, которая упорядочена в первую очередь, например 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());