This is an old revision of the document!
Functional Programming
Treating methods as first-class objects requires lambda functions. Very basic example:
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.activity_main);
        testTheThings();
    }
    // to create a basic lambda function you need to have an interface for it.
    // that serves as a template for what the function will have as inputs and outputs:
    interface MyInterface {
        int doTheThings(int i);
    }
    // now we can assign a variable to that interface:
    MyInterface myInterface = (x -> myFunction(x));
    // myFunction must be defined
    int myFunction(int i) {
        return i + 1;
    };
    // and we can call the function through the interface and print the result
    void testTheThings() {
        int result = myInterface.doTheThings(4);
        Log.v("javademo2", "having done the things resulted in " + result);
    }
};