11package org .example .server ;
22
33import java .util .ArrayList ;
4- import java .util .Collections ;
54import java .util .Comparator ;
65import 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
10085class HttpRequest {
@@ -143,4 +128,4 @@ interface FilterChain {
143128
144129interface TerminalHandler {
145130 HttpResponse handle (HttpRequest request );
146- }
131+ }
0 commit comments