用给定对象的属性列表过滤掉对象列表的最佳方法是什么。
以下是示例代码,显示了我要实现的目标:
data class Person(
val id: Long = 0,
val name: String = ""
)
fun filterOutList(): List<Person>{
val idsToRemove = listOf(1, 3)
val listToFilter = listOf(
Person(1, "John"),
Person(2, "Jane"),
Person(3, "Bob"),
Person(4, "Nick")
)
// expecting to get a list only with Objects that have ids 2 and 4
return listToFilter.filter { ??? provide `idsToRemove` to get only what was not in the list }
}
答案 0 :(得分:2)
以这种方式执行:return listToFilter.filter { it.id !in idsToRemove }
。
要对其进行编译,应在创建<Long>
:idsToRemove
或listOf<Long>(1, 3)
时显式指定listOf(1L, 3L)
类型参数。编译器隐式推断<Int>
类型的参数。
答案 1 :(得分:0)
您可以使用本机方法filter{ }
。
如下:
return listOf(
Person(1, "John"),
Person(2, "Jane"),
Person(3, "Bob"),
Person(4, "Nick")
).filter{ it.id == 2 || it.id == 4 }
答案 2 :(得分:0)
我找到了适合我的以下解决方案:
val filteredResponse = listToFilter.filter { ! idsToRemove.contains(it.id) }
但是正如@Bananon所提到的,我必须明确指定idsToRemove: listOf<Long>(1, 3)