int groups = 7 //divide list up into groups by % (their remainder) Map a = (1..50).groupBy({ it % groups }) as TreeMap assert a.keySet() == (0..<groups) as Set assert a.keySet() == [0, 1, 2, 3, 4, 5, 6] as Set //pull out specific keys (plus vals) from a Map assert a.subMap(1) == [1:[1, 8, 15, 22, 29, 36, 43, 50]] assert a.subMap([1,2]) == [1:[1, 8, 15, 22, 29, 36, 43, 50], 2:[2, 9, 16, 23, 30, 37, 44]] assert a.subMap([1,2,99]) == [1:[1, 8, 15, 22, 29, 36, 43, 50], 2:[2, 9, 16, 23, 30, 37, 44], 99:null] assert a.subMap([1,2,99]).findAll({k,v->!!v}) == [1:[1, 8, 15, 22, 29, 36, 43, 50], 2:[2, 9, 16, 23, 30, 37, 44]] assert a.subMap((1..3)) == [1:[1, 8, 15, 22, 29, 36, 43, 50], 2:[2, 9, 16, 23, 30, 37, 44], 3:[3, 10, 17, 24, 31, 38, 45]]
Monday, July 29, 2013
GroupBy and SubMap
Intersect Lists and Maps
List a = [1,2,3] List b = [2,3,4] assert [2,3] == a.intersect(b) assert [1,2,3,4] == (a + b).unique() assert [1] == a - b assert [4] == b - a Map c = [a:1, b:2, c:44] Map d = [b:2, c:3] assert [b:2] == c.intersect(d) assert [a:1, b:2, c:3] == c + d assert [a:1, b:2, c:44] == d + c assert [a:1, c:44] == c - d assert [c:3] == d - c
Wednesday, July 24, 2013
Random String generator
//see: http://groovyconsole.appspot.com/edit/1032002 String generateToken(Integer size = 16){ String availableChars = 'ABCDEFGHIJLMNOPQRSTUVXZYabcdefghijlmnopqrstuvxzy0123456789!@#$%*_' Random generator = new Random() String token = "" size.times { token += availableChars[generator.nextInt(availableChars.length() - 1)] } return token } generateToken() generateToken(8)
Thursday, July 4, 2013
printf with Strings
//all formatting options: http://docs.oracle.com/javase/6/docs/api/java/util/Formatter.html#syntax //test padding on both sides of "HI"// (-8..8).each{ i -> if (i == 0) i = '' // avoid illegal printf syntax String f = "**%${i}s**" print ((f + ' --> ').padRight(15)) // just for debugging printf(f+'\n', "HI") } //Tic Tac Toe// List field = [["","x","o"],["","x",""],["o","",""]] field.eachWithIndex { line,index -> if(index > 0) { println "---+" * 2 + "---" } printf(" %-2s| %-2s| %-2s\n", line) }
Monday, June 17, 2013
Gradle templates
// Generate a new Groovy Project Qwickly (tm) // // source: https://github.com/townsfolk/gradle-templates // in build.gradle file (in the project's root folder): apply from: 'http://www.tellurianring.com/projects/gradle-plugins/gradle-templates/apply.groovy' dependencies { groovy localGroovy() } //then get a list of tasks: >> gradle tasks ... Template tasks -------------- createGroovyClass - Creates a new Groovy class in the current project. ************** createGroovyProject - Creates a new Gradle Groovy project in a new directory named after your project. createJavaClass - Creates a new Java class in the current project. createJavaProject - Creates a new Gradle Java project in a new directory named after your project. exportGroovyTemplates - Exports the default groovy template files into the current directory. exportJavaTemplates - Exports the default java template files into the current directory. initGroovyProject - Initializes a new Gradle Groovy project in the current directory. ************** initJavaProject - Initializes a new Gradle Java project in the current directory. ... >> gradle initGroovyProject >> gradle createGroovyClass /**********************************************************/ //Here's a pretty useful project build.gradle: apply plugin: 'groovy' apply from: 'http://www.tellurianring.com/projects/gradle-plugins/gradle-templates/apply.groovy' apply from: 'http://evgenyg.artifactoryonline.com/evgenyg/libs-releases-local/CodeNarc.gradle' group = 'myapp1' mainClassName = 'org.MyCompany.Main' dependencies { groovy localGroovy() } jar { manifest { attributes("Main-Class": mainClassName) } } // uberjar adds in groovy jars to make this easy: "java -jar MyApp.jar" task uberjar(type: Jar, dependsOn:[':compileJava', ':compileGroovy']) { from files(sourceSets.main.output.classesDir) from configurations.runtime.asFileTree.files.collect { zipTree(it) } manifest { attributes 'Main-Class': mainClassName } }
Script template
// this is just intended to give a little more OOP structure to a script. // put most code inside of run(), plus class variables and methods. class Script { private String hello = "Hello" public Script run(Map options = [:]) { println "$hello ${options.name ?: 'World'}${shout(23)}" return this // for method chaining } private String shout(int times = 1) { return ('!' * times) } } new Script() .run() .run([name:'Crazy4Groovy']) println 'DONE'
Friday, June 14, 2013
Simple Performance Benchmarking
int delayMillis = 100 Long startMillis = Calendar.instance.time.time Thread.sleep(delayMillis) Long passedMillis = Calendar.instance.time.time - startMillis println passedMillis assert passedMillis >= delayMillis
Subscribe to:
Posts (Atom)