gpt4 book ai didi

android - 从 API 返回创建动态排序比较器构建器

转载 作者:行者123 更新时间:2023-11-30 04:59:29 25 4
gpt4 key购买 nike

我有一个我真的无法解决的问题..也许你可以帮助我。我需要从包含过滤器的 API 返回中对对象列表进行排序。问题是那些过滤器是动态的,对象顺序(有问题的过滤器):

class Order(val field : String, val direction: String)

字段是一个对象属性(列),方向可以是ASC或DESC。JSON 可以返回多个过滤器,因此可以是:

order : {
field : "id",
direction : "ASC"
},
{
field : "creationDate"
direction : "DESC"
}

问题是,我不知道如何创建一个可以在我的列表中创建完美排序的动态函数。我知道我必须这样做:

return list.sortedWith(compareBy(List::id).thenByDescending(List::creationDate))

但是动态地..哇

KT

最佳答案

您可以创建一个从属性名称到根据该属性比较订单的比较器的映射:

    val comparators = mapOf<String, Comparator<Order>>(
"field" to compareBy { it.field },
"direction" to compareBy { it.direction }
)

然后您可以通过给定的属性名称从该映射中选择比较器,使用 Comparator.reversed() 扩展函数更改它们的排序顺序,最后使用 将所有这些比较器组合成单个结果比较器code>Comparator.then(Comparator) 函数:

    val givenOrder = listOf("field" to "ASC", "direction" to "DESC")

val resultingOrder = givenOrder
.map { (fieldName, direction) ->
comparators[fieldName]!!.let { if (direction == "DESC") it.reversed() else it }
}
.reduce { order, nextComparator -> order.then(nextComparator) }

val sortedList = list.sortedWith(resultingOrder)

关于android - 从 API 返回创建动态排序比较器构建器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58489030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com