如何在列表中推送数字

时间:2015-03-26 05:18:41

标签: grails

我有这样的数据,

params = [10, on]

我想在列表中只保留int,我在下面做了,

def myList = []
params.each(){
  if( it != 'on'){
     myList.push(it)
  }
}
println myList

买我得到了这样的结果

[1,0]

不是[10]

2 个答案:

答案 0 :(得分:0)

如果你想获得整数params条目的列表,你可以在groovy中非常简洁:

def myList = params.findAll{it.isInteger()}

此代码遍历params并评估每个元素的闭包,并且仅当评估返回true时,该元素才会添加到myList

答案 1 :(得分:0)

您要为params打印的数据和您用于each的数据不同。如果你有一个param列表,你的代码就可以工作(即使each是错误的工具,请使用findAll)。 E.g:

def params = [10, 'on']
assert params.findAll{ it!='on' } == [10]

但是代码中的params是字符串10(而不是数字10和字符串on的列表)。由于可以迭代字符串以获取每个字符,因此会得到错误的结果。 E.g:

assert '10'.collect()==['1','0']

PS:始终使用findAll来过滤您的数据,并使用collect来映射它们。带有一些外部var的each很麻烦。