Groovy filtering array with findAll method

14,096

Seems strange. The following code works fine:

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

Could You please provide a working example?

Share:
14,096
user283188
Author by

user283188

Updated on June 19, 2022

Comments

  • user283188
    user283188 almost 2 years

    I am learning Groovy and I am trying to write an alternative to the following bit of Java code.

    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);
        }
    }
    

    When that bit of code is run recordIdentifiers should contain 50 items. This is my Groovy equivalent so far.

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

    For some reason the array contains 100 items after Groovy code is executed. All the examples of findAll() I have come across do simple comparisons when the array is constructed natively in Groovy, but how do you filter a Collection that you receive from a Java class?