首页 > 解决方案 > 过滤最后一个元素并添加到可变列表kotlin中的列表顶部

问题描述

我是 Kotlin 的新手。我需要您的帮助来对自定义数据类中的 mutableList 进行排序。我需要在列表中找到搜索元素并放入列表顶部。大多数情况下,搜索元素位于最后一个元素中。所以我不知道如何过滤它。请给我一些建议如何实现这一目标。例如

数据类

data class Person(val firstName: String, val lastName: String) 

data class Item(val gender: Int, val human: List<Human>)

data class Human(val id: Int, val person: List<Person>)

我输入了一些虚假数据

val people = mutableListOf(
        Item(1,
                listOf(
                        Human(
                                1,
                                listOf(
                                        Person("Ragnar", "Lodbrok"),
                                        Person("Bjorn", "Ironside"),
                                        Person("Sweyn", "Forkbeard")
                                )
                        ),
                        Human(
                                2,
                                listOf(
                                        Person("Ragnar", "Lodbrok"),
                                        Person("Bjorn", "Ironside"),
                                        Person("Sweyn", "Forkbeard")
                                )
                        )

                )
        )
)

如果我想搜索Forkbeard并想放在列表的顶部。但我无法做到这一点。所以请给我一些好的建议。

我试过这个但不工作

people.forEach { people ->
        people.human.forEach { human ->
            human.person.sortedByDescending { person ->
                person.lastName == "Forkbeard"
            }
        }
    }

我得到这个

[Item(gender=1, human=[Human(id=1, person=[Person(firstName=Ragnar, lastName=Lodbrok), Person(firstName=Bjorn, lastName=Ironside), Person(firstName=Sweyn, lastName=Forkbeard)]), Human(id=2, person=[Person(firstName=Ragnar, lastName=Lodbrok), Person(firstName=Bjorn, lastName=Ironside), Person(firstName=Sweyn, lastName=Forkbeard)])])]

回答

我要这个

[Item(gender=1, human=[Human(id=1, person=[Person(firstName=Sweyn, lastName=Forkbeard),Person(firstName=Ragnar, lastName=Lodbrok), Person(firstName=Bjorn, lastName=Ironside)]), Human(id=2, person=[Person(firstName=Sweyn, lastName=Forkbeard),Person(firstName=Ragnar, lastName=Lodbrok), Person(firstName=Bjorn, lastName=Ironside)])])]
[ Sweyn Forkbeard, Ragnar Lodbrok, Bjorn Ironside ]

非常感谢

标签: androidkotlin

解决方案


在 Kotlin 的一行中完成所有这些操作的一个技巧是sortBy

people.sortByDescending { it.lastName == "Forkbeard" }

推荐阅读