#android #dictionary #kotlin #filter
#Android #словарь #kotlin #Фильтр
Вопрос:
У меня есть список идентификаторов, скажем, размером 10, и у меня есть еще один список элементов, мне нужен эффективный способ удаления элементов, которые соответствуют любому из этих 10 идентификаторов
val list=items.filter { id== 1||id==3... and so on but in a more efficient way }
заранее спасибо
Ответ №1:
Возвращает список, содержащий все элементы исходной коллекции, за исключением элементов, содержащихся в данной коллекции элементов:
fun main() {
val ids = listOf(20, 30, 40, 50, 60)
val removeIds = listOf(30, 60)
val result = ids - removeIds
println(result) // [20, 40, 50]
}
Или с помощью substract:
val result = ids subtract removeIds
Ответ №2:
В случае, если вы имеете дело с a MutableList
, вы можете изменить его (или его копию), используя методы removeAll
или retainAll
:
Храните все предметы ids
, которых нет в removeIds
:
fun main() {
val ids = mutableListOf(20, 30, 40, 42, 50, 60)
val removeIds = listOf(20, 30, 40, 50, 60)
ids.retainAll { it !in removeIds }
println(ids)
}
или удалить все элементы из ids
тех, которые присутствуют в removeIds
:
fun main() {
val ids = mutableListOf(20, 30, 40, 42, 50, 60)
val removeIds = listOf(20, 30, 40, 50, 60)
ids.removeAll { it in removeIds }
println(ids)
}
Оба main
s сводятся ids
только [42]
к этим примерам и выводят именно это.
К сожалению, это не будет работать с неизменяемыми List
s, вам придется сделать это MutableList
первым, предпочтительно с помощью toMutableList()
или чего-либо подобного.
Ответ №3:
Вы можете использовать метод predicate и filterTo
//list of things you don't want in your filtered list
val listOfIds= listOf(312,264,309,297,233,262,149,156,214,350,316,315)
//a predicate used in filterTo function
private val someFilteringCondition = { num: Int ->listOfIds.contains(num) }
//list that we will filter into (it will contains filtered list
private val filteredPublishers = mutableListOf<SegmentModel>()
items.filterNotTo(filteredPublishers,someFilteringCondition )
adpater?.publishersChanged(it)
теперь список filteredPublishers содержит элементы, у которых нет упомянутых идентификаторов