In the previous tutorial we learned lambda expressions in Java 8. Here we will discuss another new feature of java 8, method reference. Method reference is a shorthand notation of a lambda expression to call a method. For example:
If your lambda expression is like this:
str -> System.out.println(str)
then you can replace it with a method reference like this:
System.out::println
The :: operator is used in method reference to separate the class or object from the method name(we will learn this with the help of examples).
Four types of method references
1. Method reference to an instance method of an object – object::instanceMethod
2. Method reference to a static method of a class – Class::staticMethod
3. Method reference to an instance method of an arbitrary object of a particular type – Class::instanceMethod
4. Method reference to a constructor – Class::new
1. Method reference to an instance method of an object
@FunctionalInterface interface MyInterface{ void display(); } public class Example { public void myMethod(){ System.out.println("Instance Method"); } public static void main(String[] args) { Example obj = new Example(); // Method reference using the object of the class MyInterface ref = obj::myMethod; // Calling the method of functional interface ref.display(); } }
Output:
Instance Method
2. Method reference to a static method of a class
import java.util.function.BiFunction; class Multiplication{ public static int multiply(int a, int b){ return a*b; } } public class Example { public static void main(String[] args) { BiFunction<Integer, Integer, Integer> product = Multiplication::multiply; int pr = product.apply(11, 5); System.out.println("Product of given number is: "+pr); } }
Output:
Product of given number is: 55
3. Method reference to an instance method of an arbitrary object of a particular type
import java.util.Arrays; public class Example { public static void main(String[] args) { String[] stringArray = { "Steve", "Rick", "Aditya", "Negan", "Lucy", "Sansa", "Jon"}; /* Method reference to an instance method of an arbitrary * object of a particular type */ Arrays.sort(stringArray, String::compareToIgnoreCase); for(String str: stringArray){ System.out.println(str); } } }
Output:
Aditya Jon Lucy Negan Rick Sansa Steve
4. Method reference to a constructor
@FunctionalInterface interface MyInterface{ Hello display(String say); } class Hello{ public Hello(String say){ System.out.print(say); } } public class Example { public static void main(String[] args) { //Method reference to a constructor MyInterface ref = Hello::new; ref.display("Hello World!"); } }
Output:
Hello World!
Leave a Reply