Groovy子集

时间:2013-04-25 13:36:58

标签: collections groovy

在子集合中获取没有项目的集合项的Groovy方法是什么。例如:

集合: [1,2,3,4,5,6]

子集合: [1,5,6]

结果应该是: [2,3,4]

编辑: 看起来我做错了什么。这是我的代码的一部分:

    def report = Report.get(params.report.id)
    def user = User.get(params.user.id)
    List<User> availableUsers = []
    availableUsers = User.findAllByCompany(company))

    List<User> addedUsers = []
    addedUsers = (List<User>) session["addedUsers"] ?: []
    addedUsers << user
    session["addedUsers"] = null
    session["addedUsers"] = addedUsers

    availableUsers = availableUsers - addedUsers        

此代码仅删除addedUsers列表中的最后一个用户。

availableUsers:[John,Jack,Jim]

addedUsers:[John,Jack]

availableUsers - addedUsers:[John,Jim]

每次只删除addedUsers中的最后一项。我猜我错过了一些明显但我无法找到的东西。

1 个答案:

答案 0 :(得分:4)

你有没有尝试过显而易见的事情:

result = [ 1, 2, 3, 4, 5, 6 ] - [ 1, 5, 6 ]

因为那是有效的......

修改

在会话中存储域对象将导致hibernate事务之间的对象不同,更好地将id存储在会话中并每次都获取Users(或者如果需要持久化,则将此功能写入域中),像:

addedUsers = session["addedUsers"].collect { User.get( it.id ) } ?: []