【问题标题】:Groovy filtering array with findAll method带有 findAll 方法的 Groovy 过滤数组
【发布时间】:2015-01-19 09:58:23
【问题描述】:

我正在学习 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 个项目。我遇到的所有 findAll() 示例都在 Groovy 中本地构造数组时进行了简单的比较,但是如何过滤从 Java 类接收到的 Collection?

【问题讨论】:

  • 这里的 100 和 50 是什么? records 中有多少个?过滤器根本不起作用还是recordIdentifiers 中有重复项?乍一看,代码看起来没问题。
  • 我后来发现,我的代码很好,但是我们的一位初级开发人员生成了一个错误的数据集供我使用 - 它有重复,因此我有 100 条记录而不是 50 条记录。他是现在被羞辱了。

标签: java arrays groovy


【解决方案1】:

看起来很奇怪。以下代码工作正常:

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

您能否提供一个工作示例?

【讨论】:

    猜你喜欢
    • 2017-05-31
    • 2016-05-05
    • 2013-08-11
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多