Как преобразовать карту, изменив ее значения? - PullRequest
0 голосов
/ 29 ноября 2018

Мне нужно хэшировать все значения на карте и возвращать карту того же типа.

Мое решение выглядит очень шатко в данный момент:

val hashedPolicies = policyProperties.map { it.key to it.value.hash() }.toMap()

Без toMap() возвращает List, что недопустимо.

Есть лилучший способ создания новой карты на карте (без использования .toMap())?

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

Попробуйте mapValues:

inline fun <K, V, R> Map<out K, V>.mapValues(
    transform: (Entry<K, V>) -> R
): Map<K, R>

Возвращает новую карту с записями, имеющими ключи этой карты и значения, полученные путем примененияфункция преобразования для каждой записи в этой карте.

Возвращенная карта сохраняет порядок итераций записи исходной карты.
kotlin-stdlib / kotlin.коллекции / mapValues ​​

val test = mapOf("foo" to "bar")
println(test)
// {foo=bar}

val result = test.mapValues { it.value.hashCode() }
println(result)
// {foo=97299}
0 голосов
/ 29 ноября 2018

Используйте сгиб, чтобы сделать все за один раз:

val hashedPolicies = policyProperties.entries.fold(mutableMapOf<KeyType, Int>{ map, it ->
    map.put(it.key, it.value.hashCode())
    map
}

В то время как mapValues является более конкретным и подходящим для этого конкретного случая, fold, поскольку метод с менее конкретным уровнем имеет преимущество для работы на всех повторяемые и типы массивов.Также он позволяет использовать произвольный тип возвращаемого значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...