从Groovy Map中删除给定的键

49

我相信这是一个非常简单的问题,但我很新于 Groovy,这是我已经挣扎了一段时间的事情。我有一个 HttpServletRequest,我需要对其参数进行操作。然而,我想要排除掉一个参数。

以前,我使用的是

req.getParameterMap

然而,为了删除这个值,我正在尝试类似以下的方法

def reqParams = req.getParameterMap?.remove('blah');

我知道上面的代码并不完全正确,但那是我尝试实现的伪代码。除了一个缺失的键以外,我确实需要新的Map和原始的req.getParameterMap()对象看起来完全相同。如何最好地实现这一点?谢谢!


3
你是否使用Grails或者只是将Groovy支持添加到你的Java应用中? - Mr. Cat
仅在Java应用程序中使用。 - JToland
2个回答

71

req.getParameterMap返回一个不可修改的映射,无法进行更改。您需要创建一个新的映射,putAll源自参数映射并删除您不想要的所需键。

def reqParams = [:] << req.getParameterMap()
reqParams.remove('blah')
你有一个新地图,名称为reqParams(不包含不需要的键值对),以及原始参数地图。

19
你可以使用findAll函数,类似这样:
def map = req.getParameterMap().findAll {it.key != 'blah'}

1
我更喜欢这个答案,因为它很容易推广(例如)以删除所有以 blah 开头的键,如下所示:def map = req.getParameterMap().findAll {!it.key.startsWith('blah')} - Mark Florence
1
很好,但是真遗憾他们没有使map - key也起作用 :D(注意map - [key: 'value']是有效的,但你需要知道值,而不仅仅是键)。 - Renato

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接