@@ -28,11 +28,9 @@ public static ShrinkingDistance of(long... distances) {
28
28
29
29
@ API (status = MAINTAINED , since = "1.0" )
30
30
public static <T > ShrinkingDistance forCollection (Collection <Shrinkable <T >> elements ) {
31
- ShrinkingDistance sumDistanceOfElements = elements
32
- .stream ()
33
- .map (Shrinkable ::distance )
34
- .reduce (ShrinkingDistance .MIN , ShrinkingDistance ::plus );
35
-
31
+ // This is an optimization to avoid creating temporary arrays, which the old streams-based implementation did.
32
+ long [] collectedDistances = sumUp (toDistances (elements ));
33
+ ShrinkingDistance sumDistanceOfElements = new ShrinkingDistance (collectedDistances );
36
34
return ShrinkingDistance .of (elements .size ()).append (sumDistanceOfElements );
37
35
}
38
36
@@ -41,9 +39,9 @@ public static <T> ShrinkingDistance combine(List<Shrinkable<T>> shrinkables) {
41
39
if (shrinkables .isEmpty ()) {
42
40
throw new IllegalArgumentException ("At least one shrinkable is required" );
43
41
}
44
- // This is an optimization to avoid creating many temporary arrays, which the old streams-based implementation did.
45
- List < long []> shrinkableDistances = toDistances ( shrinkables );
46
- long [] combinedDistances = concatenate (shrinkableDistances );
42
+
43
+ // This is an optimization to avoid creating temporary arrays, which the old streams-based implementation did.
44
+ long [] combinedDistances = concatenate (toDistances ( shrinkables ) );
47
45
return new ShrinkingDistance (combinedDistances );
48
46
}
49
47
@@ -52,7 +50,7 @@ private ShrinkingDistance(long[] distances) {
52
50
}
53
51
54
52
@ Override
55
- public boolean equals (Object o ) {
53
+ public boolean equals (@ Nullable Object o ) {
56
54
if (this == o ) return true ;
57
55
if (o == null || getClass () != o .getClass ()) return false ;
58
56
@@ -109,7 +107,7 @@ private int compareDimension(ShrinkingDistance other, int i) {
109
107
110
108
@ API (status = INTERNAL )
111
109
public ShrinkingDistance plus (ShrinkingDistance other ) {
112
- long [] summedUpDistances = sumUp (distances , other .distances );
110
+ long [] summedUpDistances = sumUp (Arrays . asList ( distances , other .distances ) );
113
111
return new ShrinkingDistance (summedUpDistances );
114
112
}
115
113
@@ -120,7 +118,7 @@ public ShrinkingDistance append(ShrinkingDistance other) {
120
118
}
121
119
122
120
@ NotNull
123
- private static <T > List <long []> toDistances (List <Shrinkable <T >> shrinkables ) {
121
+ private static <T > List <long []> toDistances (Collection <Shrinkable <T >> shrinkables ) {
124
122
List <long []> listOfDistances = new ArrayList <>(shrinkables .size ());
125
123
for (Shrinkable <?> tShrinkable : shrinkables ) {
126
124
long [] longs = tShrinkable .distance ().distances ;
0 commit comments