Aşağıdaki gibi ad ve soyad bilgisini tutan bir Person sınıfımız olsun :
package com.test.methodreference;
public class Person {
private String firstName;
private String lastName;
public Person(String firstName, String lastName) {
this.firstName=firstName;
this.lastName=lastName;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public static int compareByLastName(Person p1, Person p2){
return p1.getLastName().compareTo(p2.getLastName());
}
@Override
public String toString(){
return getFirstName()+" "+getLastName();
}
}
compareByLastName static method'u iki ismi soyada göre karşılaştırmaktadır. Bu sınıfa göre bir Person listesini sıralayabiliriz :
package com.test.methodreference;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class TestPerson {
public static void main(String args[]) {
List values = new ArrayList();
values.add(new Person("Albert","Einstein"));
values.add(new Person("Isaac","Newton"));
values.add(new Person("Galileo", "Galilei"));
values.add(new Person("Max ","Planck"));
values.add(new Person("Werner","Heisenberg"));
Collections.sort(values,Person::compareByLastName);
values.forEach(System.out::println);
}
}
Collections.sort(values,Person::compareByLastName) satırında Person::compareByLastName diyerek Person sınıfının static method'u reference olarak verilmiştir. values.forEach(System.out::println) satırında ise System.out::println ile out nesnesinin bir method'u reference olarak verilmiştir. Uygulama çalıştığında aşağıdaki gibi bir çıktı olacaktır :
Albert Einstein
Galileo Galilei
Werner Heisenberg
Isaac Newton
Max Planck