日期排序修复?
Dates sorting fix?
class Datum {
public final Integer dan;
public final Integer mesec;
public final Integer godina;
public Datum(String datum) {
String[] komponente = datum.split("\.");
dan = Integer.valueOf(komponente[0]);
mesec = Integer.valueOf(komponente[1]);
godina = Integer.valueOf(komponente[2]);
}
@Override
public String toString() {
return dan + "." + mesec + "." + godina + ".";
}
}
public class DomaciZadatakZaMozganje1 {
public static void main(String[] args) {
Datum[] datumi = new Datum[] {
new Datum("11.4.2015."),
new Datum("12.5.2013."),
new Datum("21.5.2015."),
new Datum("11.4.2014."),
new Datum("14.4.2015."),
new Datum("14.4.2014."),
new Datum("21.4.2015."),
new Datum("12.5.2014."),
new Datum("11.4.2013."),
new Datum("12.5.2015."),
new Datum("14.4.2013."),
new Datum("16.5.2015.")
};
Svetovid.out.println("Unsorted :");
for (Datum datum : datumi) {
Svetovid.out.println(datum);
}
Arrays.sort(datumi, new KomparatorDatuma());
Svetovid.out.println("Sorted: ");
for (Datum datum : datumi) {
Svetovid.out.println(datum);
}
}
}
class KomparatorDatuma implements Comparator<Datum> {
private Comparator<Integer> komparator = new ObrnutiKomparatorBrojeva();
@Override
public int compare(Datum datum1, Datum datum2) {
int rezultat = komparator.compare(datum1.godina, datum2.godina);
if (rezultat == 0)
rezultat = komparator.compare(datum1.mesec, datum2.mesec);
if (rezultat == 0)
rezultat = komparator.compare(datum1.dan, datum2.dan);
return rezultat;
}
}
class ObrnutiKomparatorBrojeva implements Comparator<Integer> {
@Override
public int compare(Integer int1, Integer int2) {
if (int1 == int2) {
return 0;
} else if (int1 < int2) {
return 1;
} else {
return -1;
}
}
}
这种排序的结果是:
14.4.2013.
11.4.2013.
12.5.2013.
12.5.2014.
14.4.2014.
11.4.2014.
16.5.2015.
12.5.2015.
21.4.2015.
14.4.2015.
21.5.2015.
11.4.2015.
为什么这不起作用?
你的比较方法有一个小问题if (int1 == int2)
不会比较值但会比较引用,试试这个:
public int compare(final Integer int1, final Integer int2) {
return int2.compareTo(int1);
}
class Datum {
public final Integer dan;
public final Integer mesec;
public final Integer godina;
public Datum(String datum) {
String[] komponente = datum.split("\.");
dan = Integer.valueOf(komponente[0]);
mesec = Integer.valueOf(komponente[1]);
godina = Integer.valueOf(komponente[2]);
}
@Override
public String toString() {
return dan + "." + mesec + "." + godina + ".";
}
}
public class DomaciZadatakZaMozganje1 {
public static void main(String[] args) {
Datum[] datumi = new Datum[] {
new Datum("11.4.2015."),
new Datum("12.5.2013."),
new Datum("21.5.2015."),
new Datum("11.4.2014."),
new Datum("14.4.2015."),
new Datum("14.4.2014."),
new Datum("21.4.2015."),
new Datum("12.5.2014."),
new Datum("11.4.2013."),
new Datum("12.5.2015."),
new Datum("14.4.2013."),
new Datum("16.5.2015.")
};
Svetovid.out.println("Unsorted :");
for (Datum datum : datumi) {
Svetovid.out.println(datum);
}
Arrays.sort(datumi, new KomparatorDatuma());
Svetovid.out.println("Sorted: ");
for (Datum datum : datumi) {
Svetovid.out.println(datum);
}
}
}
class KomparatorDatuma implements Comparator<Datum> {
private Comparator<Integer> komparator = new ObrnutiKomparatorBrojeva();
@Override
public int compare(Datum datum1, Datum datum2) {
int rezultat = komparator.compare(datum1.godina, datum2.godina);
if (rezultat == 0)
rezultat = komparator.compare(datum1.mesec, datum2.mesec);
if (rezultat == 0)
rezultat = komparator.compare(datum1.dan, datum2.dan);
return rezultat;
}
}
class ObrnutiKomparatorBrojeva implements Comparator<Integer> {
@Override
public int compare(Integer int1, Integer int2) {
if (int1 == int2) {
return 0;
} else if (int1 < int2) {
return 1;
} else {
return -1;
}
}
}
这种排序的结果是:
14.4.2013. 11.4.2013. 12.5.2013. 12.5.2014. 14.4.2014. 11.4.2014. 16.5.2015. 12.5.2015. 21.4.2015. 14.4.2015. 21.5.2015. 11.4.2015.
为什么这不起作用?
你的比较方法有一个小问题if (int1 == int2)
不会比较值但会比较引用,试试这个:
public int compare(final Integer int1, final Integer int2) {
return int2.compareTo(int1);
}