Source: http://cr.openjdk.java.net/~mcimadamore/lambda_trans.pdf