如何使用不同的运算符

时间:2018-09-28 13:43:44

标签: kotlin kotlin-extension

请让我知道为什么我得到下面提到的输出的原因吗? 我期望得到以下结果:

[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)]

1 个答案:

答案 0 :(得分: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())
}