@@ -89,9 +89,7 @@ public fun <T : Comparable<*>> compareValues(a: T?, b: T?): Int {
89
89
*/
90
90
public fun <T > compareBy (vararg selectors : (T ) -> Comparable <* >? ): Comparator <T > {
91
91
require(selectors.size > 0 )
92
- return object : Comparator <T > {
93
- public override fun compare (a : T , b : T ): Int = compareValuesByImpl(a, b, selectors)
94
- }
92
+ return Comparator { a, b -> compareValuesByImpl(a, b, selectors) }
95
93
}
96
94
97
95
@@ -100,32 +98,23 @@ public fun <T> compareBy(vararg selectors: (T) -> Comparable<*>?): Comparator<T>
100
98
* Creates a comparator using the function to transform value to a [Comparable] instance for comparison.
101
99
*/
102
100
@kotlin.internal.InlineOnly
103
- public inline fun <T > compareBy (crossinline selector : (T ) -> Comparable <* >? ): Comparator <T > {
104
- return object : Comparator <T > {
105
- public override fun compare (a : T , b : T ): Int = compareValuesBy(a, b, selector)
106
- }
107
- }
101
+ public inline fun <T > compareBy (crossinline selector : (T ) -> Comparable <* >? ): Comparator <T > =
102
+ Comparator { a, b -> compareValuesBy(a, b, selector) }
108
103
109
104
/* *
110
105
* Creates a comparator using the [selector] function to transform values being compared and then applying
111
106
* the specified [comparator] to compare transformed values.
112
107
*/
113
108
@kotlin.internal.InlineOnly
114
- public inline fun <T , K > compareBy (comparator : Comparator <in K >, crossinline selector : (T ) -> K ): Comparator <T > {
115
- return object : Comparator <T > {
116
- public override fun compare (a : T , b : T ): Int = compareValuesBy(a, b, comparator, selector)
117
- }
118
- }
109
+ public inline fun <T , K > compareBy (comparator : Comparator <in K >, crossinline selector : (T ) -> K ): Comparator <T > =
110
+ Comparator { a, b -> compareValuesBy(a, b, comparator, selector) }
119
111
120
112
/* *
121
113
* Creates a descending comparator using the function to transform value to a [Comparable] instance for comparison.
122
114
*/
123
115
@kotlin.internal.InlineOnly
124
- public inline fun <T > compareByDescending (crossinline selector : (T ) -> Comparable <* >? ): Comparator <T > {
125
- return object : Comparator <T > {
126
- public override fun compare (a : T , b : T ): Int = compareValuesBy(b, a, selector)
127
- }
128
- }
116
+ public inline fun <T > compareByDescending (crossinline selector : (T ) -> Comparable <* >? ): Comparator <T > =
117
+ Comparator { a, b -> compareValuesBy(b, a, selector) }
129
118
130
119
/* *
131
120
* Creates a descending comparator using the [selector] function to transform values being compared and then applying
@@ -134,123 +123,98 @@ public inline fun <T> compareByDescending(crossinline selector: (T) -> Comparabl
134
123
* Note that an order of [comparator] is reversed by this wrapper.
135
124
*/
136
125
@kotlin.internal.InlineOnly
137
- public inline fun <T , K > compareByDescending (comparator : Comparator <in K >, crossinline selector : (T ) -> K ): Comparator <T > {
138
- return object : Comparator <T > {
139
- public override fun compare (a : T , b : T ): Int = compareValuesBy(b, a, comparator, selector)
140
- }
141
- }
126
+ public inline fun <T , K > compareByDescending (comparator : Comparator <in K >, crossinline selector : (T ) -> K ): Comparator <T > =
127
+ Comparator { a, b -> compareValuesBy(b, a, comparator, selector) }
142
128
143
129
/* *
144
130
* Creates a comparator comparing values after the primary comparator defined them equal. It uses
145
131
* the function to transform value to a [Comparable] instance for comparison.
146
132
*/
147
133
@kotlin.internal.InlineOnly
148
- public inline fun <T > Comparator<T>.thenBy (crossinline selector : (T ) -> Comparable <* >? ): Comparator <T > {
149
- return object : Comparator <T > {
150
- public override fun compare (a : T , b : T ): Int {
134
+ public inline fun <T > Comparator<T>.thenBy (crossinline selector : (T ) -> Comparable <* >? ): Comparator <T > =
135
+ Comparator { a, b ->
151
136
val previousCompare = this @thenBy.compare(a, b)
152
- return if (previousCompare != 0 ) previousCompare else compareValuesBy(a, b, selector)
137
+ if (previousCompare != 0 ) previousCompare else compareValuesBy(a, b, selector)
153
138
}
154
- }
155
- }
156
139
157
140
/* *
158
141
* Creates a comparator comparing values after the primary comparator defined them equal. It uses
159
142
* the [selector] function to transform values and then compares them with the given [comparator].
160
143
*/
161
144
@kotlin.internal.InlineOnly
162
- public inline fun <T , K > Comparator<T>.thenBy (comparator : Comparator <in K >, crossinline selector : (T ) -> K ): Comparator <T > {
163
- return object : Comparator <T > {
164
- public override fun compare (a : T , b : T ): Int {
145
+ public inline fun <T , K > Comparator<T>.thenBy (comparator : Comparator <in K >, crossinline selector : (T ) -> K ): Comparator <T > =
146
+ Comparator { a, b ->
165
147
val previousCompare = this @thenBy.compare(a, b)
166
- return if (previousCompare != 0 ) previousCompare else compareValuesBy(a, b, comparator, selector)
148
+ if (previousCompare != 0 ) previousCompare else compareValuesBy(a, b, comparator, selector)
167
149
}
168
- }
169
- }
170
150
171
151
/* *
172
152
* Creates a descending comparator using the primary comparator and
173
153
* the function to transform value to a [Comparable] instance for comparison.
174
154
*/
175
155
@kotlin.internal.InlineOnly
176
- public inline fun <T > Comparator<T>.thenByDescending (crossinline selector : (T ) -> Comparable <* >? ): Comparator <T > {
177
- return object : Comparator <T > {
178
- public override fun compare (a : T , b : T ): Int {
156
+ public inline fun <T > Comparator<T>.thenByDescending (crossinline selector : (T ) -> Comparable <* >? ): Comparator <T > =
157
+ Comparator { a, b ->
179
158
val previousCompare = this @thenByDescending.compare(a, b)
180
- return if (previousCompare != 0 ) previousCompare else compareValuesBy(b, a, selector)
159
+ if (previousCompare != 0 ) previousCompare else compareValuesBy(b, a, selector)
181
160
}
182
- }
183
- }
184
161
185
162
/* *
186
163
* Creates a descending comparator comparing values after the primary comparator defined them equal. It uses
187
164
* the [selector] function to transform values and then compares them with the given [comparator].
188
165
*/
189
166
@kotlin.internal.InlineOnly
190
- public inline fun <T , K > Comparator<T>.thenByDescending (comparator : Comparator <in K >, crossinline selector : (T ) -> K ): Comparator <T > {
191
- return object : Comparator <T > {
192
- public override fun compare (a : T , b : T ): Int {
167
+ public inline fun <T , K > Comparator<T>.thenByDescending (comparator : Comparator <in K >, crossinline selector : (T ) -> K ): Comparator <T > =
168
+ Comparator { a, b ->
193
169
val previousCompare = this @thenByDescending.compare(a, b)
194
- return if (previousCompare != 0 ) previousCompare else compareValuesBy(b, a, comparator, selector)
170
+ if (previousCompare != 0 ) previousCompare else compareValuesBy(b, a, comparator, selector)
195
171
}
196
- }
197
- }
198
172
199
173
200
174
/* *
201
175
* Creates a comparator using the primary comparator and function to calculate a result of comparison.
202
176
*/
203
177
@kotlin.internal.InlineOnly
204
- public inline fun <T > Comparator<T>.thenComparator (crossinline comparison : (a: T , b: T ) -> Int ): Comparator <T > {
205
- return object : Comparator <T > {
206
- public override fun compare (a : T , b : T ): Int {
178
+ public inline fun <T > Comparator<T>.thenComparator (crossinline comparison : (a: T , b: T ) -> Int ): Comparator <T > =
179
+ Comparator { a, b ->
207
180
val previousCompare = this @thenComparator.compare(a, b)
208
- return if (previousCompare != 0 ) previousCompare else comparison(a, b)
181
+ if (previousCompare != 0 ) previousCompare else comparison(a, b)
209
182
}
210
- }
211
- }
212
183
213
184
/* *
214
185
* Combines this comparator and the given [comparator] such that the latter is applied only
215
186
* when the former considered values equal.
216
187
*/
217
- public infix fun <T > Comparator<T>.then (comparator : Comparator <in T >): Comparator <T > {
218
- return object : Comparator <T > {
219
- public override fun compare (a : T , b : T ): Int {
188
+ public infix fun <T > Comparator<T>.then (comparator : Comparator <in T >): Comparator <T > =
189
+ Comparator { a, b ->
220
190
val previousCompare = this @then.compare(a, b)
221
- return if (previousCompare != 0 ) previousCompare else comparator.compare(a, b)
191
+ if (previousCompare != 0 ) previousCompare else comparator.compare(a, b)
222
192
}
223
- }
224
- }
225
193
226
194
/* *
227
195
* Combines this comparator and the given [comparator] such that the latter is applied only
228
196
* when the former considered values equal.
229
197
*/
230
- public infix fun <T > Comparator<T>.thenDescending (comparator : Comparator <in T >): Comparator <T > {
231
- return object : Comparator <T > {
232
- public override fun compare (a : T , b : T ): Int {
198
+ public infix fun <T > Comparator<T>.thenDescending (comparator : Comparator <in T >): Comparator <T > =
199
+ Comparator <T > { a, b ->
233
200
val previousCompare = this @thenDescending.compare(a, b)
234
- return if (previousCompare != 0 ) previousCompare else comparator.compare(b, a)
201
+ if (previousCompare != 0 ) previousCompare else comparator.compare(b, a)
235
202
}
236
- }
237
- }
238
203
239
204
// Not so useful without type inference for receiver of expression
240
205
/* *
241
206
* Extends the given [comparator] of non-nullable values to a comparator of nullable values
242
207
* considering `null` value less than any other value.
243
208
*/
244
- public fun <T : Any > nullsFirst (comparator : Comparator <in T >): Comparator <T ?> {
245
- return object : Comparator <T ?> {
246
- override fun compare (a : T ? , b : T ? ): Int {
247
- if (a == = b) return 0
248
- if (a == null ) return - 1
249
- if (b == null ) return 1
250
- return comparator.compare(a, b)
209
+ public fun <T : Any > nullsFirst (comparator : Comparator <in T >): Comparator <T ?> =
210
+ Comparator { a, b ->
211
+ when {
212
+ a == = b -> 0
213
+ a == null -> - 1
214
+ b == null -> 1
215
+ else -> comparator.compare(a, b)
216
+ }
251
217
}
252
- }
253
- }
254
218
255
219
/* *
256
220
* Provides a comparator of nullable [Comparable] values
@@ -263,16 +227,15 @@ public inline fun <T: Comparable<T>> nullsFirst(): Comparator<T?> = nullsFirst(n
263
227
* Extends the given [comparator] of non-nullable values to a comparator of nullable values
264
228
* considering `null` value greater than any other value.
265
229
*/
266
- public fun <T : Any > nullsLast (comparator : Comparator <in T >): Comparator <T ?> {
267
- return object : Comparator <T ?> {
268
- override fun compare (a : T ? , b : T ? ): Int {
269
- if (a == = b) return 0
270
- if (a == null ) return 1
271
- if (b == null ) return - 1
272
- return comparator.compare(a, b)
230
+ public fun <T : Any > nullsLast (comparator : Comparator <in T >): Comparator <T ?> =
231
+ Comparator { a, b ->
232
+ when {
233
+ a == = b -> 0
234
+ a == null -> 1
235
+ b == null -> - 1
236
+ else -> comparator.compare(a, b)
237
+ }
273
238
}
274
- }
275
- }
276
239
277
240
/* *
278
241
* Provides a comparator of nullable [Comparable] values
0 commit comments