Применить изменения к значению, если список содержит дубликаты Kotlin - PullRequest
0 голосов
/ 07 октября 2019

У меня есть DTO

data class ComplexSearchQueryParameter(
        val key: String,
        val value: String,
        val isOneOfMany: Boolean = false
)

У меня есть список List<ComplexSearchQueryParameter>, который может содержать дубликаты ключей: ComplexSearchQueryParameter.key

как проверить, если список содержит дубликаты, и если да, то изменить ComplexSearchQueryParameter.isOneOfMany параметр в true.

Кстати, я получаю список с помощью этого метода:

   return query.split(QUERY_PARAMETERS_DELIMITER).map { queryParameter ->
        val splitedParameterKeyValue = queryParameter.split(QUERY_PARAMETER_KEY_VALUE_DELIMITER)
        val parameterKey = splitedParameterKeyValue.first().substringBefore(QUERY_PARAMETERKEY_SUFFIX)
        val parameterValue = splitedParameterKeyValue.last()

        ComplexSearchQueryParameter(parameterKey, parameterValue)
    }

Было бы лучше применить его здесь

1 Ответ

1 голос
/ 07 октября 2019

Как говорит Бананон, вы не можете изменить значения в своем списке, но вы можете создать новый список с элементами, которые отличаются только isOneOfMany:

val list = query.split(QUERY_PARAMETERS_DELIMITER).map { ... } // your current list
val doesKeyHaveDuplicates = list.groupingBy { it.key }.aggregate { _, _: Boolean?, _, first -> !first }
return list.map { it.copy(isOneOfMany = doesKeyHaveDuplicates[it.key] }

doesKeyHaveDuplicates здесь будетMap<String, Boolean>, все его ключи - это key s элементов в исходном списке, и значение равно true, если ключ имеет дубликаты, и false в противном случае;см. aggregate документацию, чтобы выяснить, как это работает.

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