Introduce minOrNull and maxOrNull extension functions #KT-39064
This commit is contained in:
+42
@@ -1393,6 +1393,16 @@ public final class kotlin/collections/ArraysKt {
|
||||
public static final fun maxBy ([Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||
public static final fun maxBy ([SLkotlin/jvm/functions/Function1;)Ljava/lang/Short;
|
||||
public static final fun maxBy ([ZLkotlin/jvm/functions/Function1;)Ljava/lang/Boolean;
|
||||
public static final fun maxOrNull ([B)Ljava/lang/Byte;
|
||||
public static final fun maxOrNull ([C)Ljava/lang/Character;
|
||||
public static final fun maxOrNull ([D)Ljava/lang/Double;
|
||||
public static final fun maxOrNull ([F)Ljava/lang/Float;
|
||||
public static final fun maxOrNull ([I)Ljava/lang/Integer;
|
||||
public static final fun maxOrNull ([J)Ljava/lang/Long;
|
||||
public static final fun maxOrNull ([Ljava/lang/Comparable;)Ljava/lang/Comparable;
|
||||
public static final fun maxOrNull ([Ljava/lang/Double;)Ljava/lang/Double;
|
||||
public static final fun maxOrNull ([Ljava/lang/Float;)Ljava/lang/Float;
|
||||
public static final fun maxOrNull ([S)Ljava/lang/Short;
|
||||
public static final fun maxWith ([BLjava/util/Comparator;)Ljava/lang/Byte;
|
||||
public static final fun maxWith ([CLjava/util/Comparator;)Ljava/lang/Character;
|
||||
public static final fun maxWith ([DLjava/util/Comparator;)Ljava/lang/Double;
|
||||
@@ -1421,6 +1431,16 @@ public final class kotlin/collections/ArraysKt {
|
||||
public static final fun minBy ([Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||
public static final fun minBy ([SLkotlin/jvm/functions/Function1;)Ljava/lang/Short;
|
||||
public static final fun minBy ([ZLkotlin/jvm/functions/Function1;)Ljava/lang/Boolean;
|
||||
public static final fun minOrNull ([B)Ljava/lang/Byte;
|
||||
public static final fun minOrNull ([C)Ljava/lang/Character;
|
||||
public static final fun minOrNull ([D)Ljava/lang/Double;
|
||||
public static final fun minOrNull ([F)Ljava/lang/Float;
|
||||
public static final fun minOrNull ([I)Ljava/lang/Integer;
|
||||
public static final fun minOrNull ([J)Ljava/lang/Long;
|
||||
public static final fun minOrNull ([Ljava/lang/Comparable;)Ljava/lang/Comparable;
|
||||
public static final fun minOrNull ([Ljava/lang/Double;)Ljava/lang/Double;
|
||||
public static final fun minOrNull ([Ljava/lang/Float;)Ljava/lang/Float;
|
||||
public static final fun minOrNull ([S)Ljava/lang/Short;
|
||||
public static final fun minWith ([BLjava/util/Comparator;)Ljava/lang/Byte;
|
||||
public static final fun minWith ([CLjava/util/Comparator;)Ljava/lang/Character;
|
||||
public static final fun minWith ([DLjava/util/Comparator;)Ljava/lang/Double;
|
||||
@@ -2195,11 +2215,17 @@ public final class kotlin/collections/CollectionsKt {
|
||||
public static final fun max (Ljava/lang/Iterable;)Ljava/lang/Double;
|
||||
public static final fun max (Ljava/lang/Iterable;)Ljava/lang/Float;
|
||||
public static final fun maxBy (Ljava/lang/Iterable;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||
public static final fun maxOrNull (Ljava/lang/Iterable;)Ljava/lang/Comparable;
|
||||
public static final fun maxOrNull (Ljava/lang/Iterable;)Ljava/lang/Double;
|
||||
public static final fun maxOrNull (Ljava/lang/Iterable;)Ljava/lang/Float;
|
||||
public static final fun maxWith (Ljava/lang/Iterable;Ljava/util/Comparator;)Ljava/lang/Object;
|
||||
public static final fun min (Ljava/lang/Iterable;)Ljava/lang/Comparable;
|
||||
public static final fun min (Ljava/lang/Iterable;)Ljava/lang/Double;
|
||||
public static final fun min (Ljava/lang/Iterable;)Ljava/lang/Float;
|
||||
public static final fun minBy (Ljava/lang/Iterable;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||
public static final fun minOrNull (Ljava/lang/Iterable;)Ljava/lang/Comparable;
|
||||
public static final fun minOrNull (Ljava/lang/Iterable;)Ljava/lang/Double;
|
||||
public static final fun minOrNull (Ljava/lang/Iterable;)Ljava/lang/Float;
|
||||
public static final fun minWith (Ljava/lang/Iterable;Ljava/util/Comparator;)Ljava/lang/Object;
|
||||
public static final fun minus (Ljava/lang/Iterable;Ljava/lang/Iterable;)Ljava/util/List;
|
||||
public static final fun minus (Ljava/lang/Iterable;Ljava/lang/Object;)Ljava/util/List;
|
||||
@@ -2615,6 +2641,10 @@ public final class kotlin/collections/unsigned/UArraysKt {
|
||||
public static final fun max-GBYM_sE ([B)Lkotlin/UByte;
|
||||
public static final fun max-QwZRm1k ([J)Lkotlin/ULong;
|
||||
public static final fun max-rL5Bavg ([S)Lkotlin/UShort;
|
||||
public static final fun maxOrNull--ajY-9A ([I)Lkotlin/UInt;
|
||||
public static final fun maxOrNull-GBYM_sE ([B)Lkotlin/UByte;
|
||||
public static final fun maxOrNull-QwZRm1k ([J)Lkotlin/ULong;
|
||||
public static final fun maxOrNull-rL5Bavg ([S)Lkotlin/UShort;
|
||||
public static final fun maxWith-XMRcp5o ([BLjava/util/Comparator;)Lkotlin/UByte;
|
||||
public static final fun maxWith-YmdZ_VM ([ILjava/util/Comparator;)Lkotlin/UInt;
|
||||
public static final fun maxWith-eOHTfZs ([SLjava/util/Comparator;)Lkotlin/UShort;
|
||||
@@ -2623,6 +2653,10 @@ public final class kotlin/collections/unsigned/UArraysKt {
|
||||
public static final fun min-GBYM_sE ([B)Lkotlin/UByte;
|
||||
public static final fun min-QwZRm1k ([J)Lkotlin/ULong;
|
||||
public static final fun min-rL5Bavg ([S)Lkotlin/UShort;
|
||||
public static final fun minOrNull--ajY-9A ([I)Lkotlin/UInt;
|
||||
public static final fun minOrNull-GBYM_sE ([B)Lkotlin/UByte;
|
||||
public static final fun minOrNull-QwZRm1k ([J)Lkotlin/ULong;
|
||||
public static final fun minOrNull-rL5Bavg ([S)Lkotlin/UShort;
|
||||
public static final fun minWith-XMRcp5o ([BLjava/util/Comparator;)Lkotlin/UByte;
|
||||
public static final fun minWith-YmdZ_VM ([ILjava/util/Comparator;)Lkotlin/UInt;
|
||||
public static final fun minWith-eOHTfZs ([SLjava/util/Comparator;)Lkotlin/UShort;
|
||||
@@ -4838,11 +4872,17 @@ public final class kotlin/sequences/SequencesKt {
|
||||
public static final fun max (Lkotlin/sequences/Sequence;)Ljava/lang/Double;
|
||||
public static final fun max (Lkotlin/sequences/Sequence;)Ljava/lang/Float;
|
||||
public static final fun maxBy (Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||
public static final fun maxOrNull (Lkotlin/sequences/Sequence;)Ljava/lang/Comparable;
|
||||
public static final fun maxOrNull (Lkotlin/sequences/Sequence;)Ljava/lang/Double;
|
||||
public static final fun maxOrNull (Lkotlin/sequences/Sequence;)Ljava/lang/Float;
|
||||
public static final fun maxWith (Lkotlin/sequences/Sequence;Ljava/util/Comparator;)Ljava/lang/Object;
|
||||
public static final fun min (Lkotlin/sequences/Sequence;)Ljava/lang/Comparable;
|
||||
public static final fun min (Lkotlin/sequences/Sequence;)Ljava/lang/Double;
|
||||
public static final fun min (Lkotlin/sequences/Sequence;)Ljava/lang/Float;
|
||||
public static final fun minBy (Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;
|
||||
public static final fun minOrNull (Lkotlin/sequences/Sequence;)Ljava/lang/Comparable;
|
||||
public static final fun minOrNull (Lkotlin/sequences/Sequence;)Ljava/lang/Double;
|
||||
public static final fun minOrNull (Lkotlin/sequences/Sequence;)Ljava/lang/Float;
|
||||
public static final fun minWith (Lkotlin/sequences/Sequence;Ljava/util/Comparator;)Ljava/lang/Object;
|
||||
public static final fun minus (Lkotlin/sequences/Sequence;Ljava/lang/Iterable;)Lkotlin/sequences/Sequence;
|
||||
public static final fun minus (Lkotlin/sequences/Sequence;Ljava/lang/Object;)Lkotlin/sequences/Sequence;
|
||||
@@ -5241,9 +5281,11 @@ public final class kotlin/text/StringsKt {
|
||||
public static final fun mapTo (Ljava/lang/CharSequence;Ljava/util/Collection;Lkotlin/jvm/functions/Function1;)Ljava/util/Collection;
|
||||
public static final fun max (Ljava/lang/CharSequence;)Ljava/lang/Character;
|
||||
public static final fun maxBy (Ljava/lang/CharSequence;Lkotlin/jvm/functions/Function1;)Ljava/lang/Character;
|
||||
public static final fun maxOrNull (Ljava/lang/CharSequence;)Ljava/lang/Character;
|
||||
public static final fun maxWith (Ljava/lang/CharSequence;Ljava/util/Comparator;)Ljava/lang/Character;
|
||||
public static final fun min (Ljava/lang/CharSequence;)Ljava/lang/Character;
|
||||
public static final fun minBy (Ljava/lang/CharSequence;Lkotlin/jvm/functions/Function1;)Ljava/lang/Character;
|
||||
public static final fun minOrNull (Ljava/lang/CharSequence;)Ljava/lang/Character;
|
||||
public static final fun minWith (Ljava/lang/CharSequence;Ljava/util/Comparator;)Ljava/lang/Character;
|
||||
public static final fun none (Ljava/lang/CharSequence;)Z
|
||||
public static final fun none (Ljava/lang/CharSequence;Lkotlin/jvm/functions/Function1;)Z
|
||||
|
||||
@@ -306,11 +306,11 @@ object Aggregates : TemplateGroupBase() {
|
||||
}
|
||||
|
||||
|
||||
val f_minMax = run {
|
||||
val f_minMax = sequence {
|
||||
val genericSpecializations = PrimitiveType.floatingPointPrimitives + setOf(null)
|
||||
|
||||
listOf("min", "max").map { op ->
|
||||
fn("$op()") {
|
||||
fun def(op: String, nullable: Boolean, orNull: String = "OrNull".ifOrEmpty(nullable)) =
|
||||
fn("$op$orNull()") {
|
||||
include(Iterables, genericSpecializations)
|
||||
include(Sequences, genericSpecializations)
|
||||
include(ArraysOfObjects, genericSpecializations)
|
||||
@@ -318,19 +318,30 @@ object Aggregates : TemplateGroupBase() {
|
||||
include(ArraysOfUnsigned)
|
||||
include(CharSequences)
|
||||
} builder {
|
||||
val isFloat = primitive?.isFloatingPoint() == true
|
||||
val isGeneric = f in listOf(Iterables, Sequences, ArraysOfObjects)
|
||||
|
||||
typeParam("T : Comparable<T>")
|
||||
if (primitive != null) {
|
||||
if (isFloat && isGeneric)
|
||||
returns("T?")
|
||||
|
||||
val isFloat = primitive?.isFloatingPoint() == true
|
||||
|
||||
if (!nullable) {
|
||||
deprecate(Deprecation("Use ${op}OrNull instead.", "${op}OrNull()", DeprecationLevel.WARNING))
|
||||
|
||||
val isGeneric = f in listOf(Iterables, Sequences, ArraysOfObjects)
|
||||
if (isFloat && isGeneric) {
|
||||
since("1.1")
|
||||
}
|
||||
|
||||
body { "return ${op}OrNull()" }
|
||||
|
||||
return@builder
|
||||
}
|
||||
|
||||
since("1.4")
|
||||
|
||||
doc {
|
||||
"Returns the ${if (op == "max") "largest" else "smallest"} ${f.element} or `null` if there are no ${f.element.pluralize()}." +
|
||||
if (isFloat) "\n\n" + "If any of ${f.element.pluralize()} is `NaN` returns `NaN`." else ""
|
||||
}
|
||||
returns("T?")
|
||||
|
||||
val acc = op
|
||||
val cmpBlock = if (isFloat)
|
||||
@@ -361,7 +372,10 @@ object Aggregates : TemplateGroupBase() {
|
||||
"""
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (op in listOf("min", "max"))
|
||||
for (nullable in listOf(false, true))
|
||||
yield(def(op, nullable))
|
||||
}
|
||||
|
||||
val f_minBy = fn("minBy(selector: (T) -> R)") {
|
||||
|
||||
Reference in New Issue
Block a user