Aspects
- Functional Programming - Functions
- Functional Programming - Functional Composition
- Functional Programming - Eager vs Lazy Evaluation
- Functional Programming - Persistent Data Structure
- Functional Programming - Recursion
- Functional Programming - Parallelism
- Functional Programming - Optionals & Monads
- Functional Programming - Closure
- Functional Programming - Currying
- Functional Programming - Reducing
Java 8 Onwards
- Functional Programming - Lambda Expressions
- Functional Programming - Default Methods
- Functional Programming - Functional Interfaces
- Functional Programming - Method References
- Functional Programming - Constructor References
- Functional Programming - Collections
Functional Programming
- Functional Programming - High Order Functions
- Functional Programming - Returning a Function
- Functional Programming - First Class Functions
- Functional Programming - Pure Functions
- Functional Programming - Type Inference
- Exception Handling in Lambda Expressions
Streams
- Functional Programming - Intermediate Methods
- Functional Programming - Terminal methods
- Functional Programming - Infinite Streams
- Functional Programming - Fixed Length Streams
Useful Resources
Functional Programming - Returning a Function
As a High Order function can return a function but how to implement using Java 8. Java 8 has provided Function interface which can accept a lambda expression. A high order function can return a lamdba expression and thus this high order function can be used to create any number of functions.
Syntax
// adder - High Order Function
// returns a function as lambda expression
Function<Integer, Integer> adder(Integer x){
return y -> y + x;
}
...
// get a function
Function<Integer, Integer> addOne = adder(1);
// apply the function
//result = 4 + 1 = 5
Integer result = addOne.apply(4);
Example - Returning a Function
FunctionTester.java
package com.tutorialspoint;
import java.util.function.Function;
public class FunctionTester {
public static void main(String[] args) {
Function<Integer, Integer> addOne = adder(1);
Function<Integer, Integer> addTwo = adder(2);
Function<Integer, Integer> addThree = adder(3);
//result = 4 + 1 = 5
Integer result = addOne.apply(4);
System.out.println(result);
//result = 4 + 2 = 6
result = addTwo.apply(4);
System.out.println(result);
//result = 4 + 3 = 7
result = addThree.apply(4);
System.out.println(result);
}
//adder - High Order Function
//returns a function as lambda expression
static Function<Integer, Integer> adder(Integer x){
return y -> y + x;
}
}
Output
Run the FunctionTester and verify the output.
5 6 7
Advertisements