2014-01-07 2 views
12

У меня есть коллекция, и я хочу найти определенные элементы и преобразовать их. Я могу сделать это в два закрытия, но мне было интересно, возможно ли это только с одним?Соберите только в том случае, если результат не равен

def c = [1, 2, 3, 4] 

def result = c.findAll { 
    it % 2 == 0 
} 

result = result.collect { 
    it /= 2 
} 

Мое истинное использование дело с Gradle, я хочу, чтобы найти определенный набор файлов и преобразовывать их в полное имя пакета.

ответ

23

Вы можете использовать findResults:

c.findResults { i -> 
    i % 2 == 0 ? // if this is true 
     it/2 : // return this 
     null  // otherwise skip this one 
} 
+0

Это было прямо под моим носом все время ... Спасибо. (Будут приняты в качестве ответа, когда вопрос достаточно старый) – Lerp

+0

Хм, это не совсем так, как в моем OP? 'findResults' останавливается после первого непустого элемента. – Lerp

+0

Вы набрали 'findResult' не' findResults' ;-) –

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