Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
kotlin distinct()或通过{}与2个现有数组进行区分_Kotlin_Duplicates_Distinct - Fatal编程技术网

kotlin distinct()或通过{}与2个现有数组进行区分

kotlin distinct()或通过{}与2个现有数组进行区分,kotlin,duplicates,distinct,Kotlin,Duplicates,Distinct,试图通过检查重复项的功能来理解不同的内容。 当我尝试使用字符串列表进行distinct时,效果很好。 当我尝试使用自定义类的Any类型时,运气不佳: 有人能帮我理解吗 var a = ArrayList<Any>() val terry = Person("Terry",13) val joe = Person("Joe", 20) val sam1 = Person("Sam",33 ) a.add(terry) a.add(joe)

试图通过检查重复项的功能来理解不同的内容。 当我尝试使用字符串列表进行distinct时,效果很好。 当我尝试使用自定义类的Any类型时,运气不佳: 有人能帮我理解吗

    var a = ArrayList<Any>()
    val terry = Person("Terry",13)
    val joe = Person("Joe", 20)
    val sam1 = Person("Sam",33 )
    a.add(terry)
    a.add(joe)
    a.add(sam1)

    var b = ArrayList<Any>()
    val valdi = Person("Valdi",55)
    val tak = Person("Tak", 54)
    val sam2 = Person("Sam",33 )
    b.add(valdi)
    b.add(tak)
    b.add(sam2)

    a.addAll(b)

    val c = a.distinct() 
    println(c) //prints all 6 items. sam1 and sam2 is duplicated.

我能想到的唯一问题是Person类不是数据类,或者它没有正确的主构造函数

data class Person(
    val name: String,
    var age: Int
)
如果您的Person类是这样的,那么:

fun findDistinct() {
    val a = ArrayList<Any>()
    val terry = Person("Terry", 13)
    val joe = Person("Joe", 20)
    val sam1 = Person("Sam", 33)
    a.add(terry)
    a.add(joe)
    a.add(sam1)

    val b = ArrayList<Any>()
    val valdi = Person("Valdi", 55)
    val tak = Person("Tak", 54)
    val sam2 = Person("Sam", 33)
    b.add(valdi)
    b.add(tak)
    b.add(sam2)

    a.addAll(b)

    val c = a.distinct()
    println(c)
}
将导致:

[人名=特里,年龄=13,人名=乔,年龄=20, Personname=Sam,年龄=33,Personname=Valdi,年龄=55,Personname=Tak, 年龄=54]

如你所料


顺便说一句,拥有数据类意味着该类自动生成equals、hashCode、toString和copy方法。另外-请注意,编译器仅使用主构造函数中为自动生成的函数定义的属性。要从生成的实现中排除属性,请在类主体中声明它。

我能想到的唯一问题是Person类不是数据类,或者它没有正确的主构造函数

data class Person(
    val name: String,
    var age: Int
)
如果您的Person类是这样的,那么:

fun findDistinct() {
    val a = ArrayList<Any>()
    val terry = Person("Terry", 13)
    val joe = Person("Joe", 20)
    val sam1 = Person("Sam", 33)
    a.add(terry)
    a.add(joe)
    a.add(sam1)

    val b = ArrayList<Any>()
    val valdi = Person("Valdi", 55)
    val tak = Person("Tak", 54)
    val sam2 = Person("Sam", 33)
    b.add(valdi)
    b.add(tak)
    b.add(sam2)

    a.addAll(b)

    val c = a.distinct()
    println(c)
}
将导致:

[人名=特里,年龄=13,人名=乔,年龄=20, Personname=Sam,年龄=33,Personname=Valdi,年龄=55,Personname=Tak, 年龄=54]

如你所料

顺便说一句,拥有数据类意味着该类自动生成equals、hashCode、toString和copy方法。另外-请注意,编译器仅使用主构造函数中为自动生成的函数定义的属性。要从生成的实现中排除属性,请在类主体中声明它。

字符串正确定义了equals和hashCode,以便具有相同内容的对象被视为相等。您的Person类应该直接这样做,或者通过使用数据类使distinct和distinctBy正常工作

这些方法在Any中的默认实现,就像Java的对象一样,将每个实例视为不同于其他实例。

字符串正确定义了equals和hashCode,因此具有相同内容的对象被视为相等。您的Person类应该直接这样做,或者通过使用数据类使distinct和distinctBy正常工作


这些方法在任何情况下的默认实现,就像Java的对象一样,将每个实例视为不同于任何其他实例。

我尝试了您的代码,它没有复制sam1和sam2,其中Person为数据类我尝试了您的代码,并且没有复制sam1和sam2,Person为数据类简短但甜蜜:-OP应该注意,任何定义了将每个对象视为不同于其他对象,所以这就是你得到的,你不会覆盖它们。简短但甜蜜:-OP应该注意,任何定义equals和hashCode方法都会将每个对象视为不同的对象,所以这就是你得到的,你不会覆盖它们。嗨,从val sam2中删除Sam怎么样?因为val sam1具有Sam的现有值?您好,从val sam2中删除Sam如何?因为val sam1具有Sam的现有值?