/* * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ @file:kotlin.jvm.JvmMultifileClass @file:kotlin.jvm.JvmName("MapsKt") package kotlin.collections // // NOTE: THIS FILE IS AUTO-GENERATED by the GenerateStandardLib.kt // See: https://github.com/JetBrains/kotlin/tree/master/libraries/stdlib // import kotlin.random.* import kotlin.ranges.contains import kotlin.ranges.reversed /** * Returns the first non-null value produced by [transform] function being applied to entries of this map in iteration order, * or throws [NoSuchElementException] if no non-null value was produced. * * @sample samples.collections.Collections.Transformations.firstNotNullOf */ @SinceKotlin("1.5") @kotlin.internal.InlineOnly public inline fun Map.firstNotNullOf(transform: (Map.Entry) -> R?): R { return firstNotNullOfOrNull(transform) ?: throw NoSuchElementException("No element of the map was transformed to a non-null value.") } /** * Returns the first non-null value produced by [transform] function being applied to entries of this map in iteration order, * or `null` if no non-null value was produced. * * @sample samples.collections.Collections.Transformations.firstNotNullOf */ @SinceKotlin("1.5") @kotlin.internal.InlineOnly public inline fun Map.firstNotNullOfOrNull(transform: (Map.Entry) -> R?): R? { for (element in this) { val result = transform(element) if (result != null) { return result } } return null } /** * Returns a [List] containing all key-value pairs. */ public fun Map.toList(): List> { if (size == 0) return emptyList() val iterator = entries.iterator() if (!iterator.hasNext()) return emptyList() val first = iterator.next() if (!iterator.hasNext()) return listOf(first.toPair()) val result = ArrayList>(size) result.add(first.toPair()) do { result.add(iterator.next().toPair()) } while (iterator.hasNext()) return result } /** * Returns a single list of all elements yielded from results of [transform] function being invoked on each entry of original map. * * @sample samples.collections.Maps.Transformations.flatMap */ public inline fun Map.flatMap(transform: (Map.Entry) -> Iterable): List { return flatMapTo(ArrayList(), transform) } /** * Returns a single list of all elements yielded from results of [transform] function being invoked on each entry of original map. * * @sample samples.collections.Collections.Transformations.flatMap */ @SinceKotlin("1.4") @OptIn(kotlin.experimental.ExperimentalTypeInference::class) @OverloadResolutionByLambdaReturnType @kotlin.jvm.JvmName("flatMapSequence") public inline fun Map.flatMap(transform: (Map.Entry) -> Sequence): List { return flatMapTo(ArrayList(), transform) } /** * Appends all elements yielded from results of [transform] function being invoked on each entry of original map, to the given [destination]. */ public inline fun > Map.flatMapTo(destination: C, transform: (Map.Entry) -> Iterable): C { for (element in this) { val list = transform(element) destination.addAll(list) } return destination } /** * Appends all elements yielded from results of [transform] function being invoked on each entry of original map, to the given [destination]. */ @SinceKotlin("1.4") @OptIn(kotlin.experimental.ExperimentalTypeInference::class) @OverloadResolutionByLambdaReturnType @kotlin.jvm.JvmName("flatMapSequenceTo") public inline fun > Map.flatMapTo(destination: C, transform: (Map.Entry) -> Sequence): C { for (element in this) { val list = transform(element) destination.addAll(list) } return destination } /** * Returns a list containing the results of applying the given [transform] function * to each entry in the original map. * * @sample samples.collections.Maps.Transformations.mapToList */ public inline fun Map.map(transform: (Map.Entry) -> R): List { return mapTo(ArrayList(size), transform) } /** * Returns a list containing only the non-null results of applying the given [transform] function * to each entry in the original map. * * @sample samples.collections.Maps.Transformations.mapNotNull */ public inline fun Map.mapNotNull(transform: (Map.Entry) -> R?): List { return mapNotNullTo(ArrayList(), transform) } /** * Applies the given [transform] function to each entry in the original map * and appends only the non-null results to the given [destination]. */ public inline fun > Map.mapNotNullTo(destination: C, transform: (Map.Entry) -> R?): C { forEach { element -> transform(element)?.let { destination.add(it) } } return destination } /** * Applies the given [transform] function to each entry of the original map * and appends the results to the given [destination]. */ public inline fun > Map.mapTo(destination: C, transform: (Map.Entry) -> R): C { for (item in this) destination.add(transform(item)) return destination } /** * Returns `true` if all entries match the given [predicate]. * * Note that if the map contains no entries, the function returns `true` * because there are no entries in it that _do not_ match the predicate. * See a more detailed explanation of this logic concept in ["Vacuous truth"](https://en.wikipedia.org/wiki/Vacuous_truth) article. * * @sample samples.collections.Collections.Aggregates.all */ public inline fun Map.all(predicate: (Map.Entry) -> Boolean): Boolean { if (isEmpty()) return true for (element in this) if (!predicate(element)) return false return true } /** * Returns `true` if map has at least one entry. * * @sample samples.collections.Collections.Aggregates.any */ public fun Map.any(): Boolean { return !isEmpty() } /** * Returns `true` if at least one entry matches the given [predicate]. * * @sample samples.collections.Collections.Aggregates.anyWithPredicate */ public inline fun Map.any(predicate: (Map.Entry) -> Boolean): Boolean { if (isEmpty()) return false for (element in this) if (predicate(element)) return true return false } /** * Returns the number of entries in this map. */ @kotlin.internal.InlineOnly public inline fun Map.count(): Int { return size } /** * Returns the number of entries matching the given [predicate]. */ public inline fun Map.count(predicate: (Map.Entry) -> Boolean): Int { if (isEmpty()) return 0 var count = 0 for (element in this) if (predicate(element)) ++count return count } /** * Performs the given [action] on each entry. */ @kotlin.internal.HidesMembers public inline fun Map.forEach(action: (Map.Entry) -> Unit): Unit { for (element in this) action(element) } /** * Returns the first entry yielding the largest value of the given function. * * @throws NoSuchElementException if the map is empty. * * @sample samples.collections.Collections.Aggregates.maxBy */ @SinceKotlin("1.7") @kotlin.jvm.JvmName("maxByOrThrow") @kotlin.internal.InlineOnly @Suppress("CONFLICTING_OVERLOADS") public inline fun > Map.maxBy(selector: (Map.Entry) -> R): Map.Entry { return entries.maxBy(selector) } /** * Returns the first entry yielding the largest value of the given function or `null` if there are no entries. * * @sample samples.collections.Collections.Aggregates.maxByOrNull */ @SinceKotlin("1.4") @kotlin.internal.InlineOnly public inline fun > Map.maxByOrNull(selector: (Map.Entry) -> R): Map.Entry? { return entries.maxByOrNull(selector) } /** * Returns the largest value among all values produced by [selector] function * applied to each entry in the map. * * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`. * * @throws NoSuchElementException if the map is empty. */ @SinceKotlin("1.4") @OptIn(kotlin.experimental.ExperimentalTypeInference::class) @OverloadResolutionByLambdaReturnType @kotlin.internal.InlineOnly public inline fun Map.maxOf(selector: (Map.Entry) -> Double): Double { return entries.maxOf(selector) } /** * Returns the largest value among all values produced by [selector] function * applied to each entry in the map. * * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`. * * @throws NoSuchElementException if the map is empty. */ @SinceKotlin("1.4") @OptIn(kotlin.experimental.ExperimentalTypeInference::class) @OverloadResolutionByLambdaReturnType @kotlin.internal.InlineOnly public inline fun Map.maxOf(selector: (Map.Entry) -> Float): Float { return entries.maxOf(selector) } /** * Returns the largest value among all values produced by [selector] function * applied to each entry in the map. * * @throws NoSuchElementException if the map is empty. */ @SinceKotlin("1.4") @OptIn(kotlin.experimental.ExperimentalTypeInference::class) @OverloadResolutionByLambdaReturnType @kotlin.internal.InlineOnly public inline fun > Map.maxOf(selector: (Map.Entry) -> R): R { return entries.maxOf(selector) } /** * Returns the largest value among all values produced by [selector] function * applied to each entry in the map or `null` if there are no entries. * * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`. */ @SinceKotlin("1.4") @OptIn(kotlin.experimental.ExperimentalTypeInference::class) @OverloadResolutionByLambdaReturnType @kotlin.internal.InlineOnly public inline fun Map.maxOfOrNull(selector: (Map.Entry) -> Double): Double? { return entries.maxOfOrNull(selector) } /** * Returns the largest value among all values produced by [selector] function * applied to each entry in the map or `null` if there are no entries. * * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`. */ @SinceKotlin("1.4") @OptIn(kotlin.experimental.ExperimentalTypeInference::class) @OverloadResolutionByLambdaReturnType @kotlin.internal.InlineOnly public inline fun Map.maxOfOrNull(selector: (Map.Entry) -> Float): Float? { return entries.maxOfOrNull(selector) } /** * Returns the largest value among all values produced by [selector] function * applied to each entry in the map or `null` if there are no entries. */ @SinceKotlin("1.4") @OptIn(kotlin.experimental.ExperimentalTypeInference::class) @OverloadResolutionByLambdaReturnType @kotlin.internal.InlineOnly public inline fun > Map.maxOfOrNull(selector: (Map.Entry) -> R): R? { return entries.maxOfOrNull(selector) } /** * Returns the largest value according to the provided [comparator] * among all values produced by [selector] function applied to each entry in the map. * * @throws NoSuchElementException if the map is empty. */ @SinceKotlin("1.4") @OptIn(kotlin.experimental.ExperimentalTypeInference::class) @OverloadResolutionByLambdaReturnType @kotlin.internal.InlineOnly public inline fun Map.maxOfWith(comparator: Comparator, selector: (Map.Entry) -> R): R { return entries.maxOfWith(comparator, selector) } /** * Returns the largest value according to the provided [comparator] * among all values produced by [selector] function applied to each entry in the map or `null` if there are no entries. */ @SinceKotlin("1.4") @OptIn(kotlin.experimental.ExperimentalTypeInference::class) @OverloadResolutionByLambdaReturnType @kotlin.internal.InlineOnly public inline fun Map.maxOfWithOrNull(comparator: Comparator, selector: (Map.Entry) -> R): R? { return entries.maxOfWithOrNull(comparator, selector) } /** * Returns the first entry having the largest value according to the provided [comparator]. * * @throws NoSuchElementException if the map is empty. */ @SinceKotlin("1.7") @kotlin.jvm.JvmName("maxWithOrThrow") @kotlin.internal.InlineOnly @Suppress("CONFLICTING_OVERLOADS") public inline fun Map.maxWith(comparator: Comparator>): Map.Entry { return entries.maxWith(comparator) } /** * Returns the first entry having the largest value according to the provided [comparator] or `null` if there are no entries. */ @SinceKotlin("1.4") @kotlin.internal.InlineOnly public inline fun Map.maxWithOrNull(comparator: Comparator>): Map.Entry? { return entries.maxWithOrNull(comparator) } /** * Returns the first entry yielding the smallest value of the given function. * * @throws NoSuchElementException if the map is empty. * * @sample samples.collections.Collections.Aggregates.minBy */ @SinceKotlin("1.7") @kotlin.jvm.JvmName("minByOrThrow") @kotlin.internal.InlineOnly @Suppress("CONFLICTING_OVERLOADS") public inline fun > Map.minBy(selector: (Map.Entry) -> R): Map.Entry { return entries.minBy(selector) } /** * Returns the first entry yielding the smallest value of the given function or `null` if there are no entries. * * @sample samples.collections.Collections.Aggregates.minByOrNull */ @SinceKotlin("1.4") @kotlin.internal.InlineOnly public inline fun > Map.minByOrNull(selector: (Map.Entry) -> R): Map.Entry? { return entries.minByOrNull(selector) } /** * Returns the smallest value among all values produced by [selector] function * applied to each entry in the map. * * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`. * * @throws NoSuchElementException if the map is empty. */ @SinceKotlin("1.4") @OptIn(kotlin.experimental.ExperimentalTypeInference::class) @OverloadResolutionByLambdaReturnType @kotlin.internal.InlineOnly public inline fun Map.minOf(selector: (Map.Entry) -> Double): Double { return entries.minOf(selector) } /** * Returns the smallest value among all values produced by [selector] function * applied to each entry in the map. * * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`. * * @throws NoSuchElementException if the map is empty. */ @SinceKotlin("1.4") @OptIn(kotlin.experimental.ExperimentalTypeInference::class) @OverloadResolutionByLambdaReturnType @kotlin.internal.InlineOnly public inline fun Map.minOf(selector: (Map.Entry) -> Float): Float { return entries.minOf(selector) } /** * Returns the smallest value among all values produced by [selector] function * applied to each entry in the map. * * @throws NoSuchElementException if the map is empty. */ @SinceKotlin("1.4") @OptIn(kotlin.experimental.ExperimentalTypeInference::class) @OverloadResolutionByLambdaReturnType @kotlin.internal.InlineOnly public inline fun > Map.minOf(selector: (Map.Entry) -> R): R { return entries.minOf(selector) } /** * Returns the smallest value among all values produced by [selector] function * applied to each entry in the map or `null` if there are no entries. * * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`. */ @SinceKotlin("1.4") @OptIn(kotlin.experimental.ExperimentalTypeInference::class) @OverloadResolutionByLambdaReturnType @kotlin.internal.InlineOnly public inline fun Map.minOfOrNull(selector: (Map.Entry) -> Double): Double? { return entries.minOfOrNull(selector) } /** * Returns the smallest value among all values produced by [selector] function * applied to each entry in the map or `null` if there are no entries. * * If any of values produced by [selector] function is `NaN`, the returned result is `NaN`. */ @SinceKotlin("1.4") @OptIn(kotlin.experimental.ExperimentalTypeInference::class) @OverloadResolutionByLambdaReturnType @kotlin.internal.InlineOnly public inline fun Map.minOfOrNull(selector: (Map.Entry) -> Float): Float? { return entries.minOfOrNull(selector) } /** * Returns the smallest value among all values produced by [selector] function * applied to each entry in the map or `null` if there are no entries. */ @SinceKotlin("1.4") @OptIn(kotlin.experimental.ExperimentalTypeInference::class) @OverloadResolutionByLambdaReturnType @kotlin.internal.InlineOnly public inline fun > Map.minOfOrNull(selector: (Map.Entry) -> R): R? { return entries.minOfOrNull(selector) } /** * Returns the smallest value according to the provided [comparator] * among all values produced by [selector] function applied to each entry in the map. * * @throws NoSuchElementException if the map is empty. */ @SinceKotlin("1.4") @OptIn(kotlin.experimental.ExperimentalTypeInference::class) @OverloadResolutionByLambdaReturnType @kotlin.internal.InlineOnly public inline fun Map.minOfWith(comparator: Comparator, selector: (Map.Entry) -> R): R { return entries.minOfWith(comparator, selector) } /** * Returns the smallest value according to the provided [comparator] * among all values produced by [selector] function applied to each entry in the map or `null` if there are no entries. */ @SinceKotlin("1.4") @OptIn(kotlin.experimental.ExperimentalTypeInference::class) @OverloadResolutionByLambdaReturnType @kotlin.internal.InlineOnly public inline fun Map.minOfWithOrNull(comparator: Comparator, selector: (Map.Entry) -> R): R? { return entries.minOfWithOrNull(comparator, selector) } /** * Returns the first entry having the smallest value according to the provided [comparator]. * * @throws NoSuchElementException if the map is empty. */ @SinceKotlin("1.7") @kotlin.jvm.JvmName("minWithOrThrow") @kotlin.internal.InlineOnly @Suppress("CONFLICTING_OVERLOADS") public inline fun Map.minWith(comparator: Comparator>): Map.Entry { return entries.minWith(comparator) } /** * Returns the first entry having the smallest value according to the provided [comparator] or `null` if there are no entries. */ @SinceKotlin("1.4") @kotlin.internal.InlineOnly public inline fun Map.minWithOrNull(comparator: Comparator>): Map.Entry? { return entries.minWithOrNull(comparator) } /** * Returns `true` if the map has no entries. * * @sample samples.collections.Collections.Aggregates.none */ public fun Map.none(): Boolean { return isEmpty() } /** * Returns `true` if no entries match the given [predicate]. * * @sample samples.collections.Collections.Aggregates.noneWithPredicate */ public inline fun Map.none(predicate: (Map.Entry) -> Boolean): Boolean { if (isEmpty()) return true for (element in this) if (predicate(element)) return false return true } /** * Performs the given [action] on each entry and returns the map itself afterwards. */ @SinceKotlin("1.1") public inline fun > M.onEach(action: (Map.Entry) -> Unit): M { return apply { for (element in this) action(element) } } /** * Performs the given [action] on each entry, providing sequential index with the entry, * and returns the map itself afterwards. * @param [action] function that takes the index of an entry and the entry itself * and performs the action on the entry. */ @SinceKotlin("1.4") public inline fun > M.onEachIndexed(action: (index: Int, Map.Entry) -> Unit): M { return apply { entries.forEachIndexed(action) } } /** * Creates an [Iterable] instance that wraps the original map returning its entries when being iterated. */ @kotlin.internal.InlineOnly public inline fun Map.asIterable(): Iterable> { return entries } /** * Creates a [Sequence] instance that wraps the original map returning its entries when being iterated. * * @sample samples.collections.Sequences.Building.sequenceFromMap */ public fun Map.asSequence(): Sequence> { return entries.asSequence() }