如何在对象集合(例如:List)中检入Kotlin所有属性都为null,但有一个属性不为null,并且以perfomat方式设置。
下面是一个例子,但是如果数据类对象有很多属性,这就很难看了。
data class Person(val name: String?, val age: Int?, val address: String?)
val people = listOf(
Person("Mary", 20, "Street 111"),
Person(null, 22, null),
Person(null, 21, "Street 123")
)
val filteredAgeOnly = people.filter{ it.address == null && it.name == null && it.age != null }
filteredAgeOnly
应该只包含年龄= 22的第二项。
如果数据类具有更多属性,则每次都必须使用&& it.newProperty == null
来接触和扩展过滤。
5条答案
按热度按时间eufgjt7s1#
我建议添加一个helper方法--这是最简单、最有效的方法(但是,正如您所注意到的,每次添加新属性时都必须添加
prop == null
)。那么,只有一个地方需要作出这样的改变,而我认为这是一个较可取的方法。
您可以使用反射来编写这样的方法,但是请记住使用这种方法时的潜在开销(以及某种过度设计):
示例:
您也可以在筛选中使用这样的方法:
ldfqzlk82#
如果我很好地理解了您的问题,您可以用途:
eqfvzcg83#
在Kotlin中,具有相同属性的数据类的示例被认为是相同的,所以这就是您可以做的。
首先,通过提供默认值
null
使所有属性都是可选的,例如那你就可以
当你添加新属性时,确保它们是可选的,那么这一行可以保持不变。
vof42yt14#
您可以创建一个Person的“过滤器示例”,如下所示:
然后通过比较内置数据类复制方法创建的本地副本来过滤列表:
要过滤的属性的值是无关紧要的,它必须是非空的。在本例中我使用0。
t1qtbnec5#
如果你想让它成为动态的,你可以使用反射来检查成员属性是否为空: