如何将列表中含指定字段值的项移动到顶部且不改变其余项排序
实现方案
核心逻辑是把原列表拆分为「匹配目标值的项」和「其余项」两个子集,再按要求的顺序拼接,不会修改其余项的原有排列顺序。
代码实现
你可以直接在原有的map转换后加一层集合处理,示例如下:
val target = "lorem" list = downloadedData.items?.map { Item( text = it.title, onClick = Button { } ) }?.run { // 拆分列表:匹配项在前,其余项保持原顺序在后 val (matchList, otherList) = partition { it.text == target } matchList + otherList }
说明
- 如果你的场景中可能存在多个
title为lorem的项,上述写法会把所有匹配项都移到列表最顶部,匹配项之间的顺序和原列表完全一致 - 如果只需要把第一个匹配的项移到顶部、其余匹配项保留原有位置,可以用下面的写法:
val target = "lorem" list = downloadedData.items?.map { Item( text = it.title, onClick = Button { } ) }?.run { val firstMatch = firstOrNull { it.text == target } ?: return@run this listOf(firstMatch) + filterNot { it === firstMatch } }
内容的提问来源于stack exchange,提问作者Wafi_ck
相关产品推荐
相关产品推荐

