首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ArrayList.filter不能工作

ArrayList.filter不能工作
EN

Stack Overflow用户
提问于 2018-02-25 13:50:16
回答 1查看 215关注 0票数 4

所以,我有这个Android的代码:

代码语言:javascript
复制
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时,它就不能工作了。我也不知道为什么。我就是这样用它的:

代码语言:javascript
复制
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,所以,这就是为什么我必须只使用过滤器(或否?)

代码:

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-25 14:01:49

removeIf将从您调用它的列表中删除元素,它可以就地工作。

代码语言:javascript
复制
val originalList = arrayListOf(1,2,3,4)
originalList.removeIf { it % 2 == 0 }
// originalList.size is 2

另一方面,filter将返回一个新列表,因此您需要使用返回的值。

代码语言:javascript
复制
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.citypr.city是相同的对象时,才会返回true,即使这两个对象具有相同的值,也会返回false,也就是说,如果equals(Any)返回true

更新

在您的代码中,您有4个布尔表达式,但只有最后一个表达式返回,您需要用一个操作符来链接它们,我添加了&&作为示例,但是您需要根据业务逻辑来调整它们。

代码语言:javascript
复制
filter { parking ->
    parking.city === pr.city &&
    parking.price.toDouble() >= pr.priceFrom &&
    parking.price.toDouble() <= pr.priceTo &&
    !parking.daysBusy.contains(daysSet.split("|").toString())
}

例如,如果您尝试使用

代码语言:javascript
复制
.filter {
    false
    true
}

所有元素都将被保留,因为第一个false将被完全忽略,如果您这样做

代码语言:javascript
复制
.filter {
    false &&
    true
}

筛选后的列表将包含0个元素,因为过滤表达式现在是false && true

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48974191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档