Mam zadanie gdzie do posortowania jest tablica obiektów klasy Event, która to ma 2 pola String. Jednym z nich jest Data i to po niej będziemy sortować. W zadaniu zaznaczono, że nie można korzystać z typów do przechowywania daty i czasu i z kolekcji. Tylko tablice.
Mój pomysł jest prosty w zamyśle: sortuje najpierw po roku, później po miesiącach i po dniach. Na razie napisałem tylko sortowanie po roku. Zanim przejdę dalej może podsuniecie pomysł jak zrobić to w bardziej elegancki sposób bo moje rozwiązanie nie podoba mi się w ogóle. A oto moje wypociny:
public static void sortEvent(Event[] events) {
Event[] sortedEventList = new Event[events.length];
Event[] unSortedEventList = new Event[events.length];
//searching first year
int index = 0;
if (!allYearsIsTheSame(events)) {
for (int i = 0; i < events.length; i++) {
sortedEventList[i] = events[findMinYer(events)];
index = 0;
for (int j = 0; j < events.length; j++) {
if (j != findMinYer(events)) {
unSortedEventList[index] = events[j];
index++;
}
}
events = Arrays.copyOf(unSortedEventList, unSortedEventList.length);
}
System.out.println("sorted List: " + Arrays.toString(sortedEventList));
}
}
static int findMinYer(Event[] events) {
int year = Integer.MAX_VALUE;
final int yearIndex = 2;
String[] date;
int minYearIndex = 0;
for (int i = 0; i < events.length; i++) {
if(events[i] != null) {
date = events[i].getEventDate().split("\\.");
if (Integer.parseInt(date[yearIndex]) < year) {
year = Integer.parseInt(date[yearIndex]);
minYearIndex = i;
}
}
}
return minYearIndex;
}
public static boolean allYearsIsTheSame(Event[] events) {
int year;
final int yearIndex = 2;
String[] date;
for (int i = 0; i < events.length - 1; i++) {
date = events[i].getEventDate().split("\\.");
year = Integer.parseInt(date[yearIndex]);
if (year != Integer.parseInt(events[i + 1].getEventDate().split("\\.")[yearIndex]))
return false;
}
return true;
}