【问题标题】:kotlin how to remove duplicate through some value in object array?kotlin 如何通过对象数组中的某个值删除重复项?
【发布时间】:2022-11-17 20:17:36
【问题描述】:

如何通过对象数组中的某个值删除重复项?


data class Person(
    val id: Int,
    val name: String,
    val gender: String
)



val person1 = Person(1, "Lonnie", "female")
val person2 = Person(2, "Noah", "male")
val person3 = Person(3, "Ollie", "female")
val person4 = Person(4, "William", "male")
val person5 = Person(5, "Lucas", "male")
val person6 = Person(6, "Mia", "male")
val person7 = Person(7, "Ollie", "female")

val personList = listOf(person1,person2,person3,person4,person5,person6,person7)

人 3 和人 7 具有“女性”性别并且具有相同的名字。所以需要删除 person7。

但是“男性”性别可以有重名。

并且必须保持列表的顺序。

期待结果

[
    Person(1, "Lonnie", "female"),
    Person(2, "Noah", "male"),
    Person(3, "Ollie", "female"),
    Person(4, "William", "male"),
    Person(5, "Lucas", "male"),
    Person(6, "Mia", "male"),
]

【问题讨论】:

    标签: kotlin


    【解决方案1】:

    您可以这样做,假设顺序由 Person 类的 id 字段指示:

    val personList = listOf(person1,person2,person3,person4,person5,person6,person7)
        .partition { it.name == "male" }
        .let { (males, females) -> males + females.distinctBy { it.name } }
        .sortedBy { it.id }
    

    【讨论】:

      【解决方案2】:

      我相信这会做你想要的:

      val result = personList.filter {
        person -> person.gender == "male" || (personList.first {
          person.name == it.name && person.gender == it.gender
        } == person)
      }
      

      【讨论】:

        猜你喜欢
        • 2015-11-04
        • 1970-01-01
        • 2022-01-24
        • 2013-07-06
        • 1970-01-01
        • 2022-12-05
        • 2019-12-12
        • 2012-11-24
        • 1970-01-01
        相关资源
        最近更新 更多