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