> Как реализовать debounce для поиска с корутинами в Kotlin (Kotlin, Android)
Уровень: senior · Роль: mobile · Категория: Технические вопросы
Компании: Wildberries
Стек: Kotlin, Android
> Пример ответа
Для реализации debounce поиска с корутинами в Kotlin (Android) используйте корутину с задержкой и отменой. Вот пример:
class SearchViewModel : ViewModel() { private val searchJob = Job() private val searchScope = CoroutineScope(Dispatchers.Default + searchJob) private val _searchQuery = MutableStateFlow("") val searchResults: StateFlow<List<String>> = _searchQuery .debounce(300) // задержка 300 мс .flatMapLatest { query -> flow { emit(searchInRepository(query)) } } .stateIn(searchScope, SharingStarted.WhileSubscribed(), emptyList()) fun onSearchQueryChanged(query: String) { _searchQuery.value = query } override fun onCleared() { super.onCleared() searchJob.cancel() } }
Ключевые моменты:
debounce(300)- игнорирует быстрые изменения запроса, ожидая паузы в 300 мс.flatMapLatest- отменяет предыдущий поиск при новом запросе.stateIn- преобразует Flow в StateFlow для UI.- Используйте
viewModelScopeдля автоматической отмены при уничтожении ViewModel.
Альтернативный вариант с явной корутиной:
private var searchJob: Job? = null fun search(query: String) { searchJob?.cancel() searchJob = viewModelScope.launch { delay(300) // выполнить поиск } }
> Похожие задачи по mobile
Можно ли создать Singleton с параметризованным конструктором в Kotlin
Уровень: seniorКатегория: Технические вопросы
Компания: Ozon
Стек: Kotlin, Android
Какие виды скоупов существуют в Kotlin Coroutines
Уровень: seniorКатегория: Технические вопросы
Компания: Radium Finance
Стек: Kotlin, Android
Какие нововведения в Kotlin и Android за последние полгода запомнились
Уровень: seniorКатегория: Технические вопросы
Компания: IBS
Стек: Kotlin, Android
Как избежать ошибок при использовании lateinit var в Kotlin
Уровень: seniorКатегория: Технические вопросы
Компания: Ozon
Стек: Kotlin, Android
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью