Skip to content

Instantly share code, notes, and snippets.

@jonatasemidio
Last active August 29, 2015 14:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jonatasemidio/c0c6d80b8c485fc853d3 to your computer and use it in GitHub Desktop.
Save jonatasemidio/c0c6d80b8c485fc853d3 to your computer and use it in GitHub Desktop.
Grep Method
//post sobre o código - http://mrhaki.blogspot.com.br/2009/08/groovy-goodness-grep-method.html
assert [true] == ['test', 12, 20, true].grep(Boolean), 'Class isInstance'
assert ['Groovy'] == ['test', 'Groovy', 'Java'].grep(~/^G.*/), 'Pattern match'
assert ['b', 'c'] == ['a', 'b', 'c', 'd'].grep(['b', 'c']), 'List contains'
assert [15, 16, 12] == [1, 15, 16, 30, 12].grep(12..18), 'Range contains'
assert [42.031] == [12.300, 109.20, 42.031, 42.032].grep(42.031), 'Object equals'
assert [100, 200] == [10, 20, 30, 50, 100, 200].grep({ it > 50 }), 'Closure boolean'
@jonatasemidio
Copy link
Author

O grep é mais um dos métodos que são definidos no DefaultGroovyMethods.java(https://github.com/groovy/groovy-core/blob/master/src/main/org/codehaus/groovy/runtime/DefaultGroovyMethods.java). Onde este será inserido em tempo de execução em todas as Collections instanciadas do projeto em questão.

Este método utiliza o DefaultGroovyMethodsSupport.createSimilarCollection() para retornar a Collection mais especifica relacionada com o parâmetro de entrada (Ex: ArrayList ou LinkedList) e o BooleanReturningMethodInvoker.invoke() para definir se o parametro possui os critérios necessários para fazer parte do retorno.

Lembrando que conforme descrito na documentação esse método só está disponível a partir da versão 2.0 da linguagem.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment