Robust sorting of CollectorNumber (as string) handling properly non-numerical nrs. and N.A.s

This commit is contained in:
leriomaggio
2021-05-24 15:50:54 +01:00
parent d71d10a97f
commit 019af5d238

View File

@@ -662,12 +662,19 @@ public enum ColumnDef {
String collectorNumber; String collectorNumber;
if (i instanceof PaperCard) { if (i instanceof PaperCard) {
collectorNumber = ((PaperCard) i).getCollectorNumber(); collectorNumber = ((PaperCard) i).getCollectorNumber();
// First off, make all NO_COLLECTOR_NUMBER the last in sortings
if (collectorNumber.equals(IPaperCard.NO_COLLECTOR_NUMBER))
collectorNumber = "50000"; // very big number of 5 digits to have them in last positions
// Now, for proper sorting, let's zero-pad the collector number (if integer) // Now, for proper sorting, let's zero-pad the collector number (if integer)
try { try {
int collNr = Integer.parseInt(collectorNumber); int collNr = Integer.parseInt(collectorNumber);
collectorNumber = String.format("%05d", collNr); collectorNumber = String.format("%05d", collNr);
} catch (NumberFormatException ex) { } catch (NumberFormatException ex) {
} // NOOP, leave it as it is - NaN (may contains letters) String nonNumeric = collectorNumber.replaceAll("[0-9]", "");
String onlyNumeric = collectorNumber.replaceAll("[^0-9]", "");
collectorNumber = String.format("%05d", Integer.parseInt(onlyNumeric)) + nonNumeric;
}
} else { } else {
collectorNumber = IPaperCard.NO_COLLECTOR_NUMBER; collectorNumber = IPaperCard.NO_COLLECTOR_NUMBER;
} }