Method reference is used to refer to a method of a functional interface. It is a compact and easy form of a lambda expression. Each time when you are using a lambda expression to just referring a method, you can replace your lambda expression with method reference.
There are following types of method references in java:
Reference to a static method
protected static void methodReferenceWithStaticMethod() {
List<String> names = Arrays.asList("Laulau","Kinga","Fusi");
names.forEach(MethodReferenceDemo::printMe);
}
public static void printMe(String str) {
System.out.println("print "+str);
}
Reference to an Object method
List<Integer> numbers = Arrays.asList(5, 3, 50, 24, 40, 2, 9, 18); numbers = numbers.stream() .sorted((a, b) -> a.compareTo(b)).collect(Collectors.toList()); // equivalent numbers = numbers.stream().sorted(Integer::compareTo).collect(Collectors.toList()); System.out.println(numbers);
Reference with Constructor
class User{
private String name;
public User(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return this.name;
}
}
....
List<String> names = Arrays.asList("Laulau","Kinga","Fusi");
names.forEach(System.out::println);
List<User> users = names.stream().map(User::new).collect(Collectors.toList());
System.out.println(users);
Result
[Laulau, Kinga, Fusi]