【问题标题】:How to filter and sort a List using another List in kotlin如何在 kotlin 中使用另一个列表过滤和排序列表
【发布时间】:2021-08-19 20:23:17
【问题描述】:

我的代码

val list1 = getAllCheckingPoints() 
val list2 = getselectedCheckingPoints()

说list1属于Type1,list2属于Type2

Type1是一个包含id,name,type,duration的数据类

Type2是一个只包含id和position的数据类

两者都包含匹配的 ID,但只有列表 2 包含位置

所以我创建了一个空列表

var filteredList: List<Type1> = emptyList()


 filteredList = list2.flatMap { list2Item->
                list1.filter { list1Item ->
                    list1Item.id == list2Item.id
                }
            }

我在这里尝试使过滤列表成为 Type1 的列表,其中只有 list1 中存在于 list2 中且与 id 匹配的项目。我被困住了 在这一步之后。

如何使用 list2 中存在的位置值对过滤列表进行排序?

【问题讨论】:

  • 如果您可以将其归结为minimal, reproducible example,这将更容易理解。我是否了解您想要对一个列表进行排序,以便其项目以与它们在另一个列表中相同的顺序出现?如果是这样,那么没有出现在另一个列表中的项目呢?你想让那些去哪里?
  • positionType2 的字段还是list2 中的对象索引?
  • 它是一个字段@МихаилНафталь
  • @gidds 请看我更新的帖子。

标签: kotlin


【解决方案1】:

据我了解,您需要过滤掉list1 中所有list2 中没有id 的项目,并根据list2 对象的某些属性对它们进行排序。

  1. 将第二个列表转换为 key=id, value=position 的地图:
val map = list2.associate { it.id to it.position }
  1. 使用此地图进行过滤和排序:
val result = list1.filter { it.id in map }.sortedBy { map[it.id] }

【讨论】:

  • 成功了,非常感谢!我很好奇如果位置来自对象索引会有什么不同?
  • 地图会有所不同:val map = list2.withIndex().associate { it.value.id to it.index }
猜你喜欢
  • 2019-01-17
  • 2022-01-02
  • 1970-01-01
  • 1970-01-01
  • 2022-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-06
相关资源
最近更新 更多