kotlin 是否有一个函数可以从另一个不同类型列表中删除一个字符串列表?

xqkwcwgp  于 2023-02-24  发布在  Kotlin
关注(0)|答案(1)|浏览(127)

我试图从一个更大的不同类型的列表(类型为CustomType)中删除一个项目列表(类型为String)。为此,我在Kotlin中使用了minus()函数,但在IntelliJ中收到了一个Type mismatch警告。如何在kotlin中处理此类情况。

fun someMethod(A: CustomTypeA): List<CustomTypeB> {

    val list_1: List<CustomTypeB> = listOf()

    // some logic that puts values into list_1

    if (list_1.count > 0) {
        return list_1.minus(
            A.excludelist
        ) // type mismatch: inferred type is String! but CustomTypeB was expected
    }
}
0vvn1miw

0vvn1miw1#

我猜您希望排除通过某些属性与它们匹配的元素。
如果是,最小工作示例:

data class Exclude(val excludeList: List<String>)
    data class Result(val prop: String)
    
    fun someMethod(exclude: Exclude): List<Result> {

        val list1: List<Result> = listOf()
        // fill the list...

        return list1.filterNot { x -> x.prop in exclude.excludeList }
    }

所以,我们在这里做的不是“删除”,而是过滤。没有必要添加isEmpty检查-对空列表进行过滤将返回空列表。
或者,还有另一种方法,即操作符重写:
首先,定义运算符:

operator fun List<Result>.minus(toRemove: List<String>): List<Result> {
        return this.filterNot { x -> x.prop in toRemove }
    }

然后,您可以拨打您期望的电话:

return list1 - exclude.excludeList
// or
return list1.minus(exclude.excludeList)

但是,在覆盖运算符时,一个非常好的实践是定义所有可能的运算符以保持一致性(我的意思是您也应该覆盖运算符minusAssign)。因此,恕我直言,在您的情况下,最好只使用过滤。

相关问题