From e2034ebd51e4aacd62a75eb3d3336e02c1ee3790 Mon Sep 17 00:00:00 2001 From: leriomaggio Date: Sat, 28 Aug 2021 20:48:27 +0100 Subject: [PATCH] Added new Lookup table for sortable collector number to avoid repeated computations for the same coll numbers! --- .../src/main/java/forge/card/CardEdition.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/forge-core/src/main/java/forge/card/CardEdition.java b/forge-core/src/main/java/forge/card/CardEdition.java index 9df2546479f..7e3c3bca32d 100644 --- a/forge-core/src/main/java/forge/card/CardEdition.java +++ b/forge-core/src/main/java/forge/card/CardEdition.java @@ -199,15 +199,21 @@ public final class CardEdition implements Comparable { * @param collectorNumber: Input collectorNumber tro transform in a Sorting Key * @return A 5-digits zero-padded collector number + any non-numerical parts attached. */ + private static Map sortableCollNumberLookup = new HashMap<>(); public static String getSortableCollectorNumber(final String collectorNumber){ - String sortableCollNr = collectorNumber; - if (sortableCollNr == null || sortableCollNr.length() == 0) - sortableCollNr = "50000"; // very big number of 5 digits to have them in last positions + String inputCollNumber = collectorNumber; + if (collectorNumber == null || collectorNumber.length() == 0) + inputCollNumber = "50000"; // very big number of 5 digits to have them in last positions + + String matchedCollNr = sortableCollNumberLookup.getOrDefault(inputCollNumber, null); + if (matchedCollNr != null) + return matchedCollNr; // Now, for proper sorting, let's zero-pad the collector number (if integer) int collNr; + String sortableCollNr = inputCollNumber; try { - collNr = Integer.parseInt(sortableCollNr); + collNr = Integer.parseInt(collectorNumber); sortableCollNr = String.format("%05d", collNr); } catch (NumberFormatException ex) { String nonNumeric = sortableCollNr.replaceAll("[0-9]", ""); @@ -222,6 +228,7 @@ public final class CardEdition implements Comparable { else // e.g. WS6, S1 sortableCollNr = nonNumeric + String.format("%05d", collNr); } + sortableCollNumberLookup.put(inputCollNumber, sortableCollNr); return sortableCollNr; }