处理Koltin过滤器谓词多个内部条件

时间:2019-07-12 19:09:45

标签: android kotlin filter kotlin-android-extensions

在下面的自定义对象列表中,我想通过比较ViewModel类中的值来实现基于某些条件的过滤

我的列表将是这样

var inputList: MutableList<Person>

人员数据类如下

data class Person(val inContact: Boolean, val age: Int, val isFavourite:Boolean .......)

根据条件进行过滤:

val fav = mViewModel.personInContact.value //TRUE or FALSE
val personAge = mViewModel.personAge.value // INT VALUE

现在,我只想在inContactfav的情况下考虑使用true

如果favfalse,我根本不想考虑inContact

因此,如果过滤列表逻辑是这样的,它将始终考虑fav条件。

val filteredFinalList = inputList.filter{

            (it. inContact == fav)//how to ignore this check based on fav's value?

            &&

            (it.age >=  personAge)

            && SOME OTHER CONDITIONS PRESENT AS WELL
}

如果{{1}中只有(it. inContact == fav)fav,我怎么考虑{strong},而避免 }}?

1 个答案:

答案 0 :(得分:1)

根据您的描述,如果favtrue,则要确保它等于it.inContact。如果favfalse,则希望表达式的计算结果为true,以便可以检查其余条件。结果将是:

((fav && it.inContact) || !fav)

任一:

  • favtrue,而fav等于it.inContact。因为我们已经知道favtrue,所以我们只会检查it.inContact是否是true。因此,我们不需要比较两个值,只需检查它们是否均为true
  • favfalse,因此我们希望整个表达式的计算结果为true。此时,!fav将始终为true,这将使||表达式的值为true