el map de kotlin agrega valor si no es igual

Tengo un val valuesMap = mutableMapOf<String, String>() Quiero agregar un nuevo valor si las teclas del map no son iguales a IgnoreCase new value.

 if(!valuesMap.keys.equalsIgnoreKeys("value")) { valuesMap.put("value", null) } 

Algo como esto, pero en kotlin solo tenemos el mismo método para las teclas.

¿Por qué no utilizar un map específico para su caso de uso?

 val caseInsensitive = TreeMap<String, String>(String.CASE_INSENSITIVE_ORDER) 

El siguiente constructor se usa aquí:

public TreeMap (Comparador comparador)

Construye un nuevo map de tree vacío, orderado de acuerdo con el comparador dado. Todas las keys insertadas en el map deben ser mutuamente comparables por el comparador dado: comparator.compare (k1, k2) no debe arrojar una ClassCastException para ninguna key k1 y k2 en el map. Si el usuario intenta poner una key en el map que viola esta restricción, la llamada put (Object key, Object value) lanzará una ClassCastException.

Parámetros : comparador: el comparador que se utilizará para solicitar este map. Si es nulo, se usará el order natural de las keys.

necesitas usar containsKey()

 if (!valuesMap.containsKey("value")) { valuesMap.put("value", null) } 

Edite 1 según el enlace en el comentario, puede usar

 String valueByKey = valuesMap.filter { it.key.equals("keyValue", ignoreCase = true) }.map { it.key }.firstOrNull() if(valueByKey==null){ valuesMap.put("keyValue", null) } 

Esto itera a través del set de keys y compara las keys de caja inferior con el término dado (key nueva).

 val map: MutableMap<String, String?> = mutableMapOf() val term = "value" val contains = map.keys.any { key -> key.toLowerCase() == term.toLowerCase() } if (!contains) { map.put(term, null) } 

Si desea agregar una key que aún no se encuentra en el map, puede aplicar un filter a las teclas mediante un pnetworkingicado que minimiza todas las teclas. Si el pnetworkingicado no arroja resultados, puede insert el par; de lo contrario, no.

Algo en la línea:

 private fun addIfNotLowerExists(map: MutableMap<String, String>, candidate: Pair<String, String>) { if (map.filter { s -> s.key.toLowerCase().equals(candidate.first.toLowerCase()) }.keys.isEmpty()) { map[candidate.first] = candidate.second } } 

Aquí hay un ejemplo del código en ejecución:

 fun main(args: Array<String>) { val map = mutableMapOf<String, String>(Pair("k1", "v1"), Pair("K2", "v2")) addIfNotLowerExists(map, Pair("k2", "v2_1")) addIfNotLowerExists(map, Pair("k3", "v3")) println(map) } private fun addIfNotLowerExists(map: MutableMap<String, String>, candidate: Pair<String, String>) { if (map.filter { s -> s.key.toLowerCase().equals(candidate.first.toLowerCase()) }.keys.isEmpty()) { map[candidate.first] = candidate.second } } 

Esto se imprime:

 {k1=v1, K2=v2, k3=v3} 

Como puede ver, el par de valores {k2:v2_1} no está insertado, porque la key K2 ya está en el map.

Sugeriría usar solo las teclas minúsculas en el map; de lo contrario, puedes hacer esto

 valuesMap.keys.map { it.toLowerCase() }.find { it == "value".toLowerCase() } ?: valuesMap.put("value", null) 
  • Kotlin Coroutines: ¿Necesitamos sincronizar el estado compartido?
  • Solución de inheritance básica de Kotlin
  • ¿Cómo agregar una vista gráfica en Android usando Kotlin?
  • ¿Cuánto time puede durar la propiedad de String en Kotlin?
  • ¿Kotlin iterator a la list?
  • ¿Por qué get classs en Kotlin usando dos puntos (: :)?
  • Importación de método estático en Kotlin
  • Retorno de la function en Kotlin como una línea cuando el object es nulo
  • ¿Cómo crear una implementación de interfaz anónima en mi class de Kotlin y usarla?
  • Kotlin - Subclass RecyclerView.ViewHolder: no se puede acceder a una propiedad adicional
  • Uso de elementos HTML estándar en KotlinJS escritos de forma segura