Aşağıdaki örnekte, bir liste içinde dolaşırken System.out.println() method'u reference olarak verilmiştir.
package com.test.methodreference;
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String args[]) {
List values = new ArrayList();
values.add("Neşet Ertaş");
values.add("Mahsuni Şerif");
values.add("Aşık Veysel");
values.add("Hacı Taşan");
values.add("Refik Başaran");
values.forEach(System.out::println);
}
}
forEach methodu Iterator interface'inde bulunan bir default method'ur. Bu method'a println method'u reference olarak verilmiştir. foreach döngü açarak sürekli println'i her eleman için çağıracaktır.
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