Functional Interfaces
A functional interface is an interface that specifies exactly on method. Functional interfaces may also have one or more default methods.
Functional ObjectsLet us begin with the
functional inteface Consumer<T>.  It 
specfies exactly one method
public void accept(T t)
This takes an object of type T and performs
some side-effect operation with it.  
Why this distinction? Java has a means of creating anonymous function called lambdas.
A Python Moment
Java Lambda Syntax
| Lambda | Action | 
|---|---|
| x -> x*x | This is a squaring function. It has a tacit return x*x; | 
| (double x) -> x*x | This squaring function insists its argument be a double. It also has a tacit return statement | 
| (x, y) -> x + y   | This is the addition function, with a tacit return. | 
| (int x) ->     
{
    y = x*x;
    return y;
}
 | This is a multiline lambda. It must have an explicit return statement. It also insists its argument be an integer. |