You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2022/09/21 17:45:58 UTC
[tomcat] branch 9.0.x updated: Refactor. Replace custom Comparators with Comparator.comparing...
This is an automated email from the ASF dual-hosted git repository.
markt pushed a commit to branch 9.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/9.0.x by this push:
new 88cf93b458 Refactor. Replace custom Comparators with Comparator.comparing...
88cf93b458 is described below
commit 88cf93b458c86ab9f7aa4e0fc002e5e51b6b7dbd
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Wed Sep 21 18:10:48 2022 +0100
Refactor. Replace custom Comparators with Comparator.comparing...
Simplifies existing code. No functional change.
---
.../apache/catalina/servlets/DefaultServlet.java | 107 ++++++---------------
1 file changed, 30 insertions(+), 77 deletions(-)
diff --git a/java/org/apache/catalina/servlets/DefaultServlet.java b/java/org/apache/catalina/servlets/DefaultServlet.java
index 311137963c..b5a72fa09c 100644
--- a/java/org/apache/catalina/servlets/DefaultServlet.java
+++ b/java/org/apache/catalina/servlets/DefaultServlet.java
@@ -38,12 +38,12 @@ import java.nio.charset.StandardCharsets;
import java.security.AccessController;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Collections;
import java.util.Comparator;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
+import java.util.function.Function;
import javax.servlet.DispatcherType;
import javax.servlet.RequestDispatcher;
@@ -2852,20 +2852,23 @@ public class DefaultServlet extends HttpServlet {
protected Comparator<WebResource> resourceLastModifiedComparatorAsc;
public SortManager(boolean directoriesFirst) {
- resourceNameComparator = new ResourceNameComparator();
- resourceNameComparatorAsc = Collections.reverseOrder(resourceNameComparator);
- resourceSizeComparator = new ResourceSizeComparator(resourceNameComparator);
- resourceSizeComparatorAsc = Collections.reverseOrder(resourceSizeComparator);
- resourceLastModifiedComparator = new ResourceLastModifiedDateComparator(resourceNameComparator);
- resourceLastModifiedComparatorAsc = Collections.reverseOrder(resourceLastModifiedComparator);
-
- if(directoriesFirst) {
- resourceNameComparator = new DirsFirstComparator(resourceNameComparator);
- resourceNameComparatorAsc = new DirsFirstComparator(resourceNameComparatorAsc);
- resourceSizeComparator = new DirsFirstComparator(resourceSizeComparator);
- resourceSizeComparatorAsc = new DirsFirstComparator(resourceSizeComparatorAsc);
- resourceLastModifiedComparator = new DirsFirstComparator(resourceLastModifiedComparator);
- resourceLastModifiedComparatorAsc = new DirsFirstComparator(resourceLastModifiedComparatorAsc);
+ resourceNameComparator = Comparator.comparing(WebResource::getName);
+ resourceNameComparatorAsc = resourceNameComparator.reversed();
+ resourceSizeComparator =
+ Comparator.comparing(WebResource::getContentLength).thenComparing(resourceNameComparator);
+ resourceSizeComparatorAsc = resourceSizeComparator.reversed();
+ resourceLastModifiedComparator =
+ Comparator.comparing(WebResource::getLastModified).thenComparing(resourceNameComparator);
+ resourceLastModifiedComparatorAsc = resourceLastModifiedComparator.reversed();
+
+ if (directoriesFirst) {
+ Comparator<WebResource> dirsFirst = comparingTrueFirst(WebResource::isDirectory);
+ resourceNameComparator = dirsFirst.thenComparing(resourceNameComparator);
+ resourceNameComparatorAsc = dirsFirst.thenComparing(resourceNameComparatorAsc);
+ resourceSizeComparator = dirsFirst.thenComparing(resourceSizeComparator);
+ resourceSizeComparatorAsc = dirsFirst.thenComparing(resourceSizeComparatorAsc);
+ resourceLastModifiedComparator = dirsFirst.thenComparing(resourceLastModifiedComparator);
+ resourceLastModifiedComparatorAsc = dirsFirst.thenComparing(resourceLastModifiedComparatorAsc);
}
defaultResourceComparator = resourceNameComparator;
@@ -3009,74 +3012,24 @@ public class DefaultServlet extends HttpServlet {
}
- private static class DirsFirstComparator implements Comparator<WebResource> {
- private final Comparator<WebResource> base;
-
- public DirsFirstComparator(Comparator<WebResource> core) {
- this.base = core;
- }
-
- @Override
- public int compare(WebResource r1, WebResource r2) {
- if(r1.isDirectory()) {
- if(r2.isDirectory()) {
- return base.compare(r1, r2);
+ private static Comparator<WebResource> comparingTrueFirst(Function<WebResource,Boolean> keyExtractor) {
+ return (s1, s2) -> {
+ Boolean r1 = keyExtractor.apply(s1);
+ Boolean r2 = keyExtractor.apply(s2);
+ if (r1.booleanValue()) {
+ if (r2.booleanValue()) {
+ return 0;
} else {
- return -1; // r1, directory, first
+ return -1; // r1 (property is true) first
}
- } else if(r2.isDirectory()) {
- return 1; // r2, directory, first
+ } else if (r2.booleanValue()) {
+ return 1; // r2 (property is true) first
} else {
- return base.compare(r1, r2);
+ return 0;
}
- }
+ };
}
- private static class ResourceNameComparator implements Comparator<WebResource> {
- @Override
- public int compare(WebResource r1, WebResource r2) {
- return r1.getName().compareTo(r2.getName());
- }
- }
-
-
- private static class ResourceSizeComparator implements Comparator<WebResource> {
- private Comparator<WebResource> base;
-
- public ResourceSizeComparator(Comparator<WebResource> base) {
- this.base = base;
- }
-
- @Override
- public int compare(WebResource r1, WebResource r2) {
- int c = Long.compare(r1.getContentLength(), r2.getContentLength());
-
- if(0 == c) {
- return base.compare(r1, r2);
- } else {
- return c;
- }
- }
- }
-
- private static class ResourceLastModifiedDateComparator implements Comparator<WebResource> {
- private Comparator<WebResource> base;
-
- public ResourceLastModifiedDateComparator(Comparator<WebResource> base) {
- this.base = base;
- }
-
- @Override
- public int compare(WebResource r1, WebResource r2) {
- int c = Long.compare(r1.getLastModified(), r2.getLastModified());
-
- if(0 == c) {
- return base.compare(r1, r2);
- } else {
- return c;
- }
- }
- }
static enum BomConfig {
/**
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org