使用findAll方法的Groovy过滤数组

时间:2014-11-21 09:40:29

标签: java arrays groovy

我正在学习Groovy,我正在尝试编写以下Java代码的替代方法。

Collection<Record> records = requestHelper.getUnmatchedRecords();
Collection<Integer> recordIdentifiers = new ArrayList<>();
for (Record record : records){
    int rowId = record.getValue("RowID");
    if (rowId >= min && rowId <= max) {
        recordIdentifiers.add(rowId);
    }
}

当运行该位代码时,recordIdentifiers应该包含50个项目。到目前为止,这是我的Groovy等价物。

def records = requestHelper.getUnmatchedRecords()
def recordIdentifiers = records.findAll{record ->
    int rowId = record.getValue("RowId")
    rowId >= min && rowId <= max
}

由于某种原因,在执行Groovy代码之后,数组包含100个项目。当我在Groovy中本地构造数组时,我遇到的findAll()的所有示例都进行了简单的比较,但是如何过滤从Java类接收的Collection?

1 个答案:

答案 0 :(得分:9)

似乎很奇怪。以下代码工作正常:

def records = [[r:3],[r:5],[r:6],[r:11],[r:10]]
def range = (1..10)
recordIdentifiers = records.findAll { range.contains(it.r) }
assert recordIdentifiers.size() == 4

你能提供一个有效的例子吗?