【问题标题】:how to use distinct operator如何使用不同的运算符
【发布时间】:2018-09-28 13:43:44
【问题描述】:

能否请您告诉我得到下面提到的输出的原因? 我希望得到以下输出:

[Person(_name=xyz4, _age=30),   
Person(_name=xyz5, _age=50)]

因为不同的操作符

主要

fun main(args: Array<String>) {
val person1 = Person("xyz1", 10);
val person2 = Person("xyz2", 20);
val person3 = Person("xyz3", 30);
val person4 = Person("xyz4", 30);
val person5 = Person("xyz5", 50);

var persons = listOf(
person1, person2, person3, person4 , person5)
.asSequence()
.filter { x-> x.age >=30 }
.distinct()

println(persons.toList())
}

输出

[Person(_name=xyz3, _age=30), Person(_name=xyz4, _age=30), 
Person(_name=xyz5, _age=50)]

【问题讨论】:

  • 你可以用sequenceOf代替listOf
  • 因为你的 person4 已经 60 岁了
  • distinct 删除重复项,但没有重复项。为什么你认为它应该删除Person(_name=xyz3, _age=60)
  • 请注意,输出与输入不匹配。您的输入中没有姓名为 xyz3 且年龄为 60 的人。所以你可能没有得到你发布的输出,或者你可能没有使用你发布的 inpt。
  • @LetsamrIt Person(_name=xyz4, _age=30) 来自哪里?该人在您的输入列表中不存在。

标签: kotlin kotlin-extension


【解决方案1】:

你可以使用

.distinctBy { it.age }

而不是

.distinct()

如果元素的顺序很重要,您可以像这样添加 sortedBy

fun main(args: Array<String>) {
    val person1 = Person("xyz1", 10)
    val person2 = Person("xyz2", 20)
    val person3 = Person("xyz3", 30)
    val person4 = Person("xyz4", 30)
    val person5 = Person("xyz5", 50)

    val persons = listOf(
            person1, person2, person3, person4, person5)
            .reversed()
            .filter { x -> x.age >= 30 }
            .distinctBy { it.age }
            .sortedBy { it.age }

    println(persons.toList())
}

【讨论】:

    猜你喜欢
    • 2018-06-30
    • 2016-02-19
    • 2020-11-28
    • 2013-03-29
    • 1970-01-01
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多