Skip to content

Commit aba21a5

Browse files
committed
Refactor filter pipeline: sort FilterRegistration directly by order
1 parent afbe07f commit aba21a5

1 file changed

Lines changed: 16 additions & 31 deletions

File tree

src/main/java/org/example/server/ConfigurableFilterPipeline.java

Lines changed: 16 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package org.example.server;
22

33
import java.util.ArrayList;
4-
import java.util.Collections;
54
import java.util.Comparator;
65
import java.util.List;
76

@@ -15,37 +14,32 @@ public ConfigurableFilterPipeline(List<FilterRegistration> registrations) {
1514

1615
public HttpResponse execute(HttpRequest request, TerminalHandler handler) {
1716

18-
List<HttpFilter> globalFilters = new ArrayList<>();
19-
List<HttpFilter> routeFilters = new ArrayList<>();
17+
List<FilterRegistration> globalRegs = new ArrayList<>();
18+
List<FilterRegistration> routeRegs = new ArrayList<>();
2019

2120
for (FilterRegistration reg : registrations) {
22-
2321
if (reg.isGlobal()) {
24-
globalFilters.add(reg.filter());
22+
globalRegs.add(reg);
2523
} else {
2624
if (matchesAny(reg.routePatterns(), request.path())) {
27-
routeFilters.add(reg.filter());
25+
routeRegs.add(reg);
2826
}
2927
}
3028
}
3129

32-
Collections.sort(globalFilters, new Comparator<HttpFilter>() {
33-
@Override
34-
public int compare(HttpFilter f1, HttpFilter f2) {
35-
return Integer.compare(getOrder(f1), getOrder(f2));
36-
}
37-
});
30+
Comparator<FilterRegistration> byOrder =
31+
Comparator.comparingInt(FilterRegistration::order);
3832

39-
Collections.sort(routeFilters, new Comparator<HttpFilter>() {
40-
@Override
41-
public int compare(HttpFilter f1, HttpFilter f2) {
42-
return Integer.compare(getOrder(f1), getOrder(f2));
43-
}
44-
});
33+
globalRegs.sort(byOrder);
34+
routeRegs.sort(byOrder);
4535

46-
List<HttpFilter> allFilters = new ArrayList<>();
47-
allFilters.addAll(globalFilters);
48-
allFilters.addAll(routeFilters);
36+
List<HttpFilter> allFilters = new ArrayList<>(globalRegs.size() + routeRegs.size());
37+
for (FilterRegistration reg : globalRegs) {
38+
allFilters.add(reg.filter());
39+
}
40+
for (FilterRegistration reg : routeRegs) {
41+
allFilters.add(reg.filter());
42+
}
4943

5044
return buildChain(allFilters, handler).next(request);
5145
}
@@ -86,15 +80,6 @@ public HttpResponse next(HttpRequest request) {
8680

8781
return chain;
8882
}
89-
90-
private int getOrder(HttpFilter filter) {
91-
for (FilterRegistration reg : registrations) {
92-
if (reg.filter() == filter) {
93-
return reg.order();
94-
}
95-
}
96-
return 0;
97-
}
9883
}
9984

10085
class HttpRequest {
@@ -143,4 +128,4 @@ interface FilterChain {
143128

144129
interface TerminalHandler {
145130
HttpResponse handle(HttpRequest request);
146-
}
131+
}

0 commit comments

Comments
 (0)