2016-01-06 3 views
0

Я следующий массив массивов в заводнойGroovy FindAll в массиве массивов

def userList = [[name: user1, id:0, ip: 127.0.0.1], [name: user2, id:1, ip: 127.0.0.2], [name: user3, id:2, ip: 127.0.0.3]] 

Я Перебор другого списка rows, и я хочу, чтобы извлечь данные из приведенного выше списка на основе индекса.

rows.eachWithIndex { row, index -> 
     groovy.lang.Closure idMatch = { it.id == index } 
     def match = userList.findAll(idMatch) 
     println(match) 
    } 

матч всегда возвращается пустым.

Значение индекса отображается правильно как 0,1,2 и т. Д., Когда я его распечатываю.

+0

Ваш код работает для меня ... –

+2

Я думаю, что 'id' в файле' userList' не является 'Integer' –

+0

@tim_yates мне нужно использовать' it.id.toInteger() '? – user2133404

ответ

2

С Groovy 2.4 и выше, один подход должен был бы использовать indices и collect() на rows вместо eachWithIndex:

def userList = [ 
    [name: 'user1', id:0, ip: '127.0.0.1'], 
    [name: 'user2', id:1, ip: '127.0.0.2'], 
    [name: 'user3', id:2, ip: '127.0.0.3'] 
] 

def rows = ['foo', 'bar'] 

// Using indices 
rows.indices.collect { index -> 
    userList.find { it.id == index } 
} 

// Using indexed()  
rows.indexed().collect { index, item -> 
    userList.find { it.id == index } 
} 
+0

Индексированный() метод или индексы недоступны. «rows» - это список, и я использую grails. 2.4.4. – user2133404

+0

Имеет смысл, Grails 2.4.4 поставляется с Groovy 2.3.7. – dmahapatro

+1

С учетом того, что у вас есть, оно должно печатать ожидаемые результаты. соответствие выводит результаты. @ user2133404 – dmahapatro

Смежные вопросы