Настройка фильтрации с использованием списка в Kotlin

#kotlin #filter

#kotlin #Фильтр

Вопрос:

Я пытаюсь выполнить фильтрацию в списке по другому списку значений, например

Я хочу сделать это

   selectedAreasList = ListOf(1,2,3)

  initialItemProductList.filter { it.areaId in setOf(selectedAreasList) }
 

вместо этого

   initialItemProductList.filter { it.areaId in setOf(1,2,3) }
 

Потому что я не знаю, сколько элементов будет в моем списке

Комментарии:

1. Вам не нужен строго набор для вызова in ; он будет работать in selectedAreasList напрямую. Но большинство реализаций Set гораздо эффективнее в этом (поскольку они могут просматривать хэш-код напрямую, а не сканировать его каждый раз), так что обычно это хорошая идея.

Ответ №1:

Вместо использования setOf в списке используйте существующую toSet функцию, определенную для всех Sequence :

 selectedAreasList = listOf(1, 2, 3)
// make a set before the filter to avoid repeatedly making a set
selectedAreasSet = selectedAreasList.toSet()
initialItemProductList.filter { id.areaId in selectedAreasSet }
 

Комментарии:

1. как прелесть… Спасибо, чувак

2. Я думаю, вы неправильно написали collection с sequence , хотя он также определен для последовательностей 🙂