You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2018/01/22 16:13:25 UTC
[isis] 05/05: ISIS-1846 refactoring: less heap pollution on
sequence compare
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch ISIS-1846_internal_utils
in repository https://gitbox.apache.org/repos/asf/isis.git
commit 47790a6d47fe9d9d7cea84ac7710251ee1f3abb9
Author: Andi Huber <ah...@apache.org>
AuthorDate: Mon Jan 22 17:13:18 2018 +0100
ISIS-1846 refactoring: less heap pollution on sequence compare
---
.../isis/applib/internal/compare/$Comparators.java | 4 ++-
.../compare/$Comparators_SequenceCompare.java | 29 +++++++++++-----------
2 files changed, 17 insertions(+), 16 deletions(-)
diff --git a/core/applib/src/main/java/org/apache/isis/applib/internal/compare/$Comparators.java b/core/applib/src/main/java/org/apache/isis/applib/internal/compare/$Comparators.java
index d8f74b0..13908f6 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/internal/compare/$Comparators.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/internal/compare/$Comparators.java
@@ -37,10 +37,12 @@ public final class $Comparators {
private $Comparators(){}
+ private static final String DEWEY_SEPERATOR = ".";
+
public static int deweyOrderCompare(
@Nullable final String sequence1,
@Nullable final String sequence2) {
- return $Comparators_SequenceCompare.compareNullLast(sequence1, sequence2, ".");
+ return $Comparators_SequenceCompare.compareNullLast(sequence1, sequence2, DEWEY_SEPERATOR);
}
public static final Comparator<String> deweyOrderComparator = $Comparators::deweyOrderCompare;
diff --git a/core/applib/src/main/java/org/apache/isis/applib/internal/compare/$Comparators_SequenceCompare.java b/core/applib/src/main/java/org/apache/isis/applib/internal/compare/$Comparators_SequenceCompare.java
index d8d01c8..2ebf914 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/internal/compare/$Comparators_SequenceCompare.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/internal/compare/$Comparators_SequenceCompare.java
@@ -47,11 +47,11 @@ final class $Comparators_SequenceCompare {
return -1; // non-null before null
}
- final String[] components1 = componentsFor(sequence1, separator);
- final String[] components2 = componentsFor(sequence2, separator);
+ final StringTokenizer components1 = tokenizerFor(sequence1, separator);
+ final StringTokenizer components2 = tokenizerFor(sequence2, separator);
- final int length1 = components1.length;
- final int length2 = components2.length;
+ final int length1 = components1.countTokens();
+ final int length2 = components2.countTokens();
// shouldn't happen but just in case.
if (length1 == 0 && length2 == 0) {
@@ -74,15 +74,18 @@ final class $Comparators_SequenceCompare {
return 0;
}
// we have this component on each side
+
+ final String token1 = components1.nextToken();
+ final String token2 = components2.nextToken();
int componentCompare = 0;
try {
- final Integer c1 = Integer.valueOf(components1[n]);
- final Integer c2 = Integer.valueOf(components2[n]);
- componentCompare = c1.compareTo(c2);
+ final int c1 = Integer.parseInt(token1);
+ final int c2 = Integer.parseInt(token2);
+ componentCompare = Integer.compare(c1, c2);
} catch (final NumberFormatException nfe) {
// not integers compare as strings
- componentCompare = components1[n].compareTo(components2[n]);
+ componentCompare = token1.compareTo(token2);
}
if (componentCompare != 0) {
@@ -93,13 +96,9 @@ final class $Comparators_SequenceCompare {
}
}
- private static String[] componentsFor(final String sequence, final String separator) {
- final StringTokenizer tokens = new StringTokenizer(sequence, separator, false);
- final String[] components = new String[tokens.countTokens()];
- for (int i = 0; tokens.hasMoreTokens(); i++) {
- components[i] = tokens.nextToken();
- }
- return components;
+ private static StringTokenizer tokenizerFor(final String sequence, final String separator) {
+ return new StringTokenizer(sequence, separator, false);
}
+
}
--
To stop receiving notification emails like this one, please contact
ahuber@apache.org.