Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Kotlin: mvi, state, filter

Как организовать стейт-менеджмент при множественных фильтрах (дата, поиск, статус)?

Вопрос рассматривает управление сложным состоянием с несколькими фильтрами.

Короткий ответ

Используйте:

  • Единый State с полями для каждого фильтра.

  • Отложенное применение (debounce для поиска).

  • Изоляцию логики фильтрации в отдельный класс.

Длинный ответ

Структура State:

data class State(
    val query: String = "",
    val dateRange: DateRange? = null,
    val status: Status? = null,
    val results: List<Item> = emptyList()
)

Оптимизации:

  1. Debounce для поиска:

    flow.debounce(300.ms).collect { query -> updateState { copy(query = query) } }
  2. Комбинирование фильтров:

    fun applyFilters(): List<Item> {
        return data.filter { item ->
            (query.isEmpty() || item.name.contains(query)) &&
            (dateRange == null || item.date in dateRange) &&
            (status == null || item.status == status)
        }
    }

Вывод:
Группируйте фильтры в одном State и применяйте их атомарно.

  • Аватар

    Android Guru

    Anton Gulyaev

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    2

  • Сложность:

    5

Навыки

  • Kotlin

    Kotlin

Ключевые слова

#mvi

#state

#filter

Подпишись на Android Developer в телеграм

  • Аватар

    Android Guru

    Anton Gulyaev

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.