03k*_*kim 1 iteration iterator kotlin
让我详细说明一下:
我需要能够迭代对象列表。每个对象都有一个列表属性,我必须检查该列表是否包含其他列表中不存在的元素。
当我尝试使用嵌套 for 循环来做到这一点时,它不断给我并发修改异常,所以我尝试使用迭代器,但现在我陷入困境,因为如果我基于对象列表创建一个迭代器,我可以不访问单个对象的属性然后进行迭代。
这是我试图完成的一些示例代码:
for (preference in preferencesWithRestaurant) {
for (restaurantID in preference.restaurantIDs) {
// One method I tried using
preferencesWithRestaurant.removeIf{ !listOfIds.contains(restaurantID) }
/* alternate method I tried using
if (!listOfIds.contains(restaurantID)) {
preferencesWithRestaurant.remove(preference)
}
*/
}
}
Run Code Online (Sandbox Code Playgroud)
如果您可以替换值preferencesWithRestaurant或将结果存储在另一个变量中,那么您可以过滤它:
preferencesWithRestaurant = preferencesWithRestaurant.filter { preference ->
preference.restaurantIDs.all { it in listOfIds }
}
Run Code Online (Sandbox Code Playgroud)
根据您的确切类型,preferencesWithRestaurant您可能需要将其转换为正确的类型,例如toMutableList()在最后调用。
preferencesWithRestaurant如果您喜欢就地修改,那么您可以使用retainAll()(感谢@Tenfour04):
preferencesWithRestaurant.retainAll { preference ->
preference.restaurantIDs.all { it in listOfIds }
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以保留原始方法,但使用可变迭代器在迭代时删除项目:
val iter = preferencesWithRestaurant.listIterator()
for (preference in iter) {
for (restaurantID in preference.restaurantIDs) {
if (!listOfIds.contains(restaurantID)) {
iter.remove()
break
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
548 次 |
| 最近记录: |