I have enough knowledge of Lambdas In Java to be able to use them where useful, but under the covers there’s more to how functions are defined and referenced using the interfaces in java.util.function. Here’s a few notes digging into more details on implementing functions in Java.
Java interfaces used to define types for Lambda expressions and method references:
interface Function<T, R>
Defines a function which takes a parameter of type T and returns a result of type R
Single argument functions:
A function that takes a parameter of type T but with no return value. Provides single function void accept(T)
A function that takes no argument but returns a result of type T. Provides single functional method T get()
To define a function that doesn’t take any parameters or return a result can be represented by interface Java.lang.Runnable
All other interfaces in java.util,function are variations of Provider and Supplier, such as …
Bi Function interfaces
BiFunction<T, U, R>
A function that takes 2 parameters of type T and U and returns result of type R
A function that takes 2 parameters of types T and U but no return type.
A function that takes a parameter of type T and returns a Boolean result. Example usage is for a filter function on Streams
Special case of Function that takes an argument and returns the result of the same type
Takes 2 parameters of the type and results a result of the same type
Method references use the :: syntax to refer to a static method that exists on a Class and pass this as a reference in place of a Lambda. For example System.out::println
To print each element of a list you could pass a Lambda calling println for each item:
list.forEach( item -> System.out.println(item)):
but using a method reference simplifies this to:
Method references implement a functional interface but instead of implementing a new method like with a Lambda, a Method reference points to a method that already exists in a Class.
Mwthod references can be used to a static method with
or to a method on an instance with