1 /*
2  * Copyright (C) 2023 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
5  * except in compliance with the License. You may obtain a copy of the License at
6  *
7  *      http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software distributed under the
10  * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
11  * KIND, either express or implied. See the License for the specific language governing
12  * permissions and limitations under the License.
13  *
14  */
15 
16 package com.android.systemui.util.kotlin
17 
18 /** Like [mapValues], but discards `null` values returned from [block]. */
<lambda>null19 fun <K, V, R> Map<K, V>.mapValuesNotNull(block: (Map.Entry<K, V>) -> R?): Map<K, R> = buildMap {
20     this@mapValuesNotNull.mapValuesNotNullTo(this, block)
21 }
22 
23 /** Like [mapValuesTo], but discards `null` values returned from [block]. */
mapValuesNotNullTonull24 fun <K, V, R, M : MutableMap<in K, in R>> Map<out K, V>.mapValuesNotNullTo(
25     destination: M,
26     block: (Map.Entry<K, V>) -> R?,
27 ): M {
28     for (entry in this) {
29         block(entry)?.also { destination.put(entry.key, it) }
30     }
31     return destination
32 }
33 
34 /** Returns a map with all entries containing `null` values removed. */
<lambda>null35 fun <K, V> Map<K, V?>.filterValuesNotNull(): Map<K, V> = mapValuesNotNull { it.value }
36