当我发现特定对象隐私时,我正试图从列表中删除对象 对当前用户是私有的
books.eachWithIndex{ obj, i ->
if((obj.book.private).equals(true)){
def status = bookService.getBookStatus(obj.book)
if(!status){
books.remove(i)
}
}
}
尝试删除对象时抛出错误
错误errors.GrailsExceptionResolver - null java.util.ConcurrentModificationException
问:有没有办法从列表中删除对象 或者你是否必须单独存储索引值并从每个循环外部删除对象?
答案 0 :(得分:7)
更实用的方法可能有所帮助:
def publicBooks = books.findAll { obj ->
!obj.book.isPrivate() || bookService.getBookStatus(obj.book)
}
请注意,findAll()会返回 new 集合,而不是修改现有集合。
答案 1 :(得分:2)
有一个迭代器有一个.remove()方法,但我不知道该功能是否已被翻译成groovyesque。它不适用于Java的增强功能。
尝试手动迭代它(使用迭代器,正常的旧式Java样式for循环)并使用iterator.remove()...除非Groovy为您提供了对迭代器的访问,否则它是唯一的方法在你迭代的时候去做。
答案 2 :(得分:0)
hibernate filters plugin就是为这种情况而创建的。我已经在我们当前的项目中使用它来进行这种过滤。