【问题标题】:Drop list if element found in nested list in kotlin如果在 kotlin 的嵌套列表中找到元素,则删除列表
【发布时间】:2022-06-10 23:17:59
【问题描述】:

嘿,我有一个来自服务器的巨大列表。我在列表顶部添加了一些数据。我想从列表中删除数据。我有嵌套列表,我需要在其中找到嵌套列表中的元素。

fun categoriesList() = listOf(
    Categories("21", "physical", listOf(SubTopic("1", "abc"), SubTopic("2", "bjhef"))),
    Categories("2211", "mind", listOf(SubTopic("1", "abc"), SubTopic("2", "bjhef"))),
    Categories("22131", "motorized", listOf(SubTopic("1", "abc"), SubTopic("2", "bjhef"))),
    Categories("2134124", "coordination", listOf(SubTopic("1", "abc"), SubTopic("2", "bjhef"))),
    Categories("211243", "animal-supported", listOf(SubTopic("1", "abc"), SubTopic("2", "bjhef"))),
)

Categories.kt

data class Categories(
    val id: String? = null, val title: String? = null, val subTopic: List<SubTopic>? = null
)

SubTopic.kt

data class SubTopic(
    val id: String? = null, val title: String? = null, var priceId: String? = null
)

ma​​in.kt

var categoryList: List<Categories>? = null

fun main() {
    categoryList = categoriesList()
    categoryList?.add(0, Categories("0", "physical-ktm", listOf(SubTopic("1", "vivek"))))
}

所以我想找到name = "Vivek",如果发现我想删除我的整个列表索引 0 元素数据。 重要 我只需要检查索引 0 处的元素。我不想迭代整个列表。如果找到索引 0 中的数据,则将其删除,否则将其保留在迭代中。那么以 kotlin 惯用方式执行此操作的有效方法是什么。有人可以指导我。谢谢

【问题讨论】:

  • 名为name的属性在哪里?也没有示例行带有“Vivek”。

标签: kotlin


【解决方案1】:

因此,如果我正确理解了这个问题,那么如果 title 是“Vivek”,您希望消除 categoriesList 中每个类别的第一个 - 并且只有第一个 - 子主题:

data class SubTopic(
  val id: String? = null,
  val title: String? = null,
  var priceId: String? = null
)

data class Categories(
  val id: String? = null,
  val title: String? = null,
  val subTopic: List<SubTopic>? = null
)

val categoriesList = listOf(
  Categories("21", "physical", listOf(SubTopic("1", "abc"), SubTopic("2", "Vivek"))),
  Categories("2211", "mind", listOf(SubTopic("1", "Vivek"), SubTopic("2", "bjhef"))),
  Categories("22131", "motorized", listOf(SubTopic("1", "abc"), SubTopic("2", "bjhef"))),
  Categories("2134124", "coordination", listOf(SubTopic("1", "Vivek"), SubTopic("2", "Vivek"))),
  Categories("211243", "animal-supported", listOf(SubTopic("1", "abc"), SubTopic("2", "bjhef"))),
)

var categoryList = categoriesList
  .map {
    it.copy(subTopic = it.subTopic
      ?.filterIndexed { index, subTopic -> (index == 0 && subTopic.title != "Vivek") || index > 0 }
    )
  }

categoryList.forEach(::println)

【讨论】:

    猜你喜欢
    • 2020-09-29
    • 2019-07-13
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    • 2017-03-02
    • 2021-07-17
    • 2020-11-20
    • 2022-10-15
    相关资源
    最近更新 更多