Kotlin список фильтров в списке - PullRequest
1 голос
/ 27 мая 2020

Как я могу вернуть исходный список (или копию списка) при попытке отфильтровать вложенный список, у меня есть следующий метод:

если я использую .map, я получаю вложенный список как возврат , если я использую flatMap, я получаю вложенный список -> List>

private fun filterForShop(
        list: MutableList<WidgetItem>
    ): List<WidgetItem> {
        val result = list.map {
            it.compList.filter { comp ->
                comp.id != "square"
            }
        }
    }

Мой объект выглядит так:

data class WidgetItem(
    val id: String,
    val title: String,
    val kind: String,
    val compList: List<CompItem>
) 

Ответы [ 2 ]

3 голосов
/ 27 мая 2020

Поскольку compList равно val, мы можем копировать только старые элементы с новым compList значением

private fun filterForShop(
    list: MutableList<WidgetItem>
): List<WidgetItem> = list.map {
    it.copy(compList = it.compList.filter { comp ->
        comp.id != "square"
    })
}
1 голос
/ 27 мая 2020

Вы можете использовать .also() для выполнения операции, но с сохранением исходного контекста.

private fun filterForShop(
        list: MutableList<WidgetItem>
    ): List<WidgetItem> =
        list.also {
            it.compList = it.compList
                .filter { comp ->
                    comp.id != "square"
                }
        }

Это будет работать, только если compList доступен для записи, чего нет в данном случае. Вам нужно будет сделать это, как предложил @ IR42.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...