所以,我有这个Android的代码:
parkingList.removeIf { parking-> parking.city != pr.city }
parkingList.removeIf { parking-> parking.price.toDouble() <= pr.priceFrom }
parkingList.removeIf { parking-> parking.price.toDouble() >= pr.priceTo }
parkingList.removeIf { parking-> parking.daysBusy.contains(daysSet.split("|").toString()) }这是我现在的密码。我不能使用其他任何东西,因为当我使用筛选器到我的数组列表parkingList时,它就不能工作了。我也不知道为什么。我就是这样用它的:
parkingList.filter { parking-> parking.city === pr.city }
parkingList.filter { parking-> parking.price.toDouble() >= pr.priceFrom }
parkingList.filter { parking-> parking.price.toDouble() <= pr.priceTo }
parkingList.filter { parking-> !parking.daysBusy.contains(daysSet.split("|").toString()) }但出于某种原因它不起作用。我只需要API19,所以,这就是为什么我必须只使用过滤器(或否?)
代码:
val filteredList = parkingList.filter { parking-> parking.city === pr.city
parking.price.toDouble() >= pr.priceFrom
parking.price.toDouble() <= pr.priceTo
!parking.daysBusy.contains(daysSet.split("|").toString())
} as ArrayList
filteredList.forEach { println(it) }
val adapter = CustomAdapter(filteredList)发布于 2018-02-25 14:01:49
removeIf将从您调用它的列表中删除元素,它可以就地工作。
val originalList = arrayListOf(1,2,3,4)
originalList.removeIf { it % 2 == 0 }
// originalList.size is 2另一方面,filter将返回一个新列表,因此您需要使用返回的值。
val originalList = listOf(1,2,3,4)
val filteredList = originalList.filter { it % 2 == 0 }
// originalList.size is 4
// filteredList.size is 2此外,当您检查parking.city === pr.city是否相等时,只有当parking.city和pr.city是相同的对象时,才会返回true,即使这两个对象具有相同的值,也会返回false,也就是说,如果equals(Any)返回true
更新
在您的代码中,您有4个布尔表达式,但只有最后一个表达式返回,您需要用一个操作符来链接它们,我添加了&&作为示例,但是您需要根据业务逻辑来调整它们。
filter { parking ->
parking.city === pr.city &&
parking.price.toDouble() >= pr.priceFrom &&
parking.price.toDouble() <= pr.priceTo &&
!parking.daysBusy.contains(daysSet.split("|").toString())
}例如,如果您尝试使用
.filter {
false
true
}所有元素都将被保留,因为第一个false将被完全忽略,如果您这样做
.filter {
false &&
true
}筛选后的列表将包含0个元素,因为过滤表达式现在是false && true。
https://stackoverflow.com/questions/48974191
复制相似问题