首页 > 解决方案 > 如何在 Livedata Recyclerview 中按单词的第一个字母排序?

问题描述

我有来自 json 和 LiveData 的数据类改造。我正在发送带有观察的适配器列表。如何按观察中单词的第一个字母排序?

private fun getAllTeams(){
    viewModel.getMyGroupMembers().observe(viewLifecycleOwner, Observer {
            it.sortedBy {
                it.name
            }
           it.forEach {
               it.name.toCharArray().sorted().joinToString("")

           }
        Log.d("sort",it.toString())

        scoreAdapter.submitList(it)
        scoreAdapter.notifyDataSetChanged()


    })
}

我尝试了一些东西,但它不起作用

class ScoreViewModel(private val scoreApi: ScoreApi) : ViewModel() {

@ExperimentalCoroutinesApi
private val myGroupMembers = MutableLiveData<List<DataClass>>()

@ExperimentalCoroutinesApi
fun getMyGroupMembers(): LiveData<List<DataClass>> = myGroupMembers


fun getAllGroups(){
    viewModelScope.launch(Dispatchers.IO) {
       val response =  scoreApi.getAllGroups()
        updateUi(response)
    }
}

@ExperimentalCoroutinesApi
private fun updateUi(update: List<DataClass>) {
    viewModelScope.launch(Dispatchers.Main) {
        myGroupMembers.value = update
    }
}

标签: androidkotlin

解决方案


sortedBy当您想要制作列表的副本时使用方法。它通常在您的主列表不可变时使用:

val sortedList = it.sortedBy { it.name }

如果您想在不复制的情况下就地排序,您可以使用sortBy扩展名。这仅在您的列表是可变的时才有效。

it.sortBy { it.name }

推荐阅读