Skip to content

Instantly share code, notes, and snippets.

@crazy4groovy
Forked from kiy0taka/tree.md
Created June 27, 2016 03:11
Show Gist options
  • Save crazy4groovy/f40f5a6a5762d60f906e683975acb072 to your computer and use it in GitHub Desktop.
Save crazy4groovy/f40f5a6a5762d60f906e683975acb072 to your computer and use it in GitHub Desktop.
A one-line tree in Groovy

One line Tree in Groovy

The other day, I saw Harold Cooper's One-line tree in Python via autovivication, and wondered if the same thing was possible in Groovy.

The answer is yes! But you need to define the variable tree before you can assign it to the self-referential withDefault closure, hence with Groovy, it's a two-line solution ;-)

Anyway, given:

def tree = { [:].withDefault{ owner.call() } }

We can then do:

users = tree()
users.harold.username = 'hrldcpr'
users.yates.username = 'tim'

And printing this out

println new groovy.json.JsonBuilder( users ).toPrettyString()

gives:

{
    "harold": {
        "username": "hrldcpr"
    },
    "yates": {
        "username": "tim"
    }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment