如何在Kotlin中对对象列表进行排序?

dkqlctbz  于 2023-06-24  发布在  Kotlin
关注(0)|答案(3)|浏览(152)

我有一个这样的对象列表:

[
    {
      "Price": 2100000,
      "Id": "5f53787e871ebc4bda455927"
    },
    {
      "Price": 2089000,
      "Id": "5f7da4ef7a0ad2ed730416f8"
    },
    {
   
      "Price": 0,
      "Id": "5f82b1189c333dab0b1ce3c5"
    }
 ]

我如何按对象的价格值对列表进行排序,然后将其传递给适配器?

t0ybt7op

t0ybt7op1#

如果你有一个这样的对象:

class YourClass(
  val price: Int,
  val id: String
)

您可以通过两种方式按价格排序:

可变

val yourMutableList: MutableList<YourClass> = mutableListOf()
yourMutableList.sortBy { it.price }
// now yourMutableList is sorted itself

不可变

val yourList: List<YourClass> = listOf()
val yourSortedList: List<YourClass> = yourList.sortedBy { it.price }

如您所见,在第二个示例中,您必须将结果保存在一个新列表中。由于List是不可变的,因此不能修改需要新建一个list
快乐编码!:)

yvfmudvl

yvfmudvl2#

假设你有一个类来表示你的元素:

data class Element (
    val price: Int, 
    val id: String
)

并给出一个来自反序列化器的列表:

val listOfElements: List<Element> = ...

您可以获得按价格排序的新列表,如下所示:

val sortedByPrice = listOfElements.sortedBy { it.price }

在KotlinPlayground尝试一下:https://pl.kotl.in/TBIdxsaoi

hec6srdp

hec6srdp3#

下面是一个非常简单的例子,可以根据您选择的顺序进行排序:

class Pizza(
  val price: Double
)

val regularSlice = Pizza(price = 2.75)
val extraCheeseSlice = Pizza(price = 3.75)
val pepperoniSlice = Pizza(price = 4.75)

val list = ArrayList<Pizza>()
list.add(extraCheeseSlice)
list.add(pepperoniSlice)
list.add(regularSlice)

这是一个完全相同的列表,按位置排序:

list.sortBy { it.price } // lowest to highest - result is: regularSlice, extraCheeseSlice, pepperoniSlice

list.sortByDescending { it.price } // highest to lowest - result is: pepperoniSlice, extraCheeseSlice, regularSlice

如果你想要一个新的列表,只需使用sortedBy

val newListFromLowestToHighest = list.sortedBy { it.price } // result is: regularSlice, extraCheeseSlice, pepperoniSlice
    
val newListFromHighestToLowest = list.sortByDescending { it.price } // result is: pepperoniSlice, extraCheeseSlice, regularSlice

相关问题