Как удалить элемент из MutableSet при определенных условиях? - PullRequest
0 голосов
/ 03 октября 2019
var chart_values: MutableSet<MutableMap.MutableEntry<String, Any>>? = mutableSetOf()

Печать chart_values ​​:

[ground={}, 
ground_level={0=115, 1=4, 2=0, 3=37, 4=63, 5=44, 6=40, 7=9}, 
ground_over={0=3, 1=3, 2=3, 3=3, 4=3, 5=3, 6=3}
date_of_birth=1988-07-18T00:00Z]

Я бы хотел remove ground={} из chart_values ​​

Ответы [ 3 ]

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

Учитывая, что chartValues имеет тип MutableSet<MutableMap.MutableEntry<String, Any>>?, вы можете сделать следующее, чтобы удалить любую запись с пустой картой в качестве значения:

chartValues?.removeAll { (_, value) ->
    (value as? Map<*,  *>)?.isEmpty() == true
}

as? называется оператором безопасного приведения и будетвернуть приведенный объект или ноль, если приведение не удалось.

Примечание:

  • Возможно, лучше использовать MutableMap<String, Any>
  • , использовать valвместо var, поскольку вы хотите изменить коллекцию, а не ссылку на нее
0 голосов
/ 03 октября 2019
fun removeMapEntryIfEmpty() {
        val iterator: MutableIterator<MutableMap.MutableEntry<String, Any>> =
            player.chart_values?.iterator()!!
        iterator.forEach {
            // it: MutableMap.MutableEntry<String, Any>

            if (it.value.toString() == "{}") {
                iterator.remove()

            }
        }
    }
0 голосов
/ 03 октября 2019

КСТАТИ:

  • Ваш набор может быть фактически картой Map<String, Any>
  • chart_values не соответствует правилам именования котлинов. Используйте случай верблюда

Так как значение имеет тип Any - который должен быть изменен на более конкретный тип, если это возможно - мы должны сначала проверить, например,

val chart_values: MutableSet<MutableMap.MutableEntry<String, Any>>? = mutableSetOf()
val withoutEmptyValues = chart_values.filter { (_, value) -> value is Collection<*> && value.isNotEmpty() } 

РЕДАКТИРОВАТЬ

Если некоторые элементы не являются коллекциями:

val withoutEmptyValues = chart_values.filter { (_, value) -> if(value is Collection<*>) value.isNotEmpty() else true } 

Тест

Я не могу создать экземпляры MutableMap.MutableEntry, поэтому я создалМао, который делает это для меня внутренне:

    val map: MutableMap<String, Any> = mutableMapOf(
            "ground" to listOf<Int>(1, 2, 3),
            "empty" to emptyList<Double>(),
            "date" to "1988-07-18T00:00Z"
    )

    val withoutEmptyValues = map
            .filter { (_, value) -> if (value is Collection<*>) value.isNotEmpty() else true }

    assertThat(withoutEmptyValues).isNotEmpty.isEqualTo(
            mutableMapOf<String, Any>(
                    "ground" to listOf<Int>(1, 2, 3),
                    "date" to "1988-07-18T00:00Z"
            )
    )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...