Aşağıdaki gibi bir interface yaratmış olalım.
public interface SumInterface {
public int sum(int x,int y);
}
Bu interface aşağıdaki gibi kullanılabilir:
SumInterface s1 = (x, y) -> x + y;
int sum = s1.sum(3, 4);
System.out.println("top 1 : " + sum);
Yukarıdaki örnekte SumInterface'i implement eden bir s1 nesnesi yarattık. Bu nesne SumInterface'inin sum methodunu override ediyor ve x+y şeklinde gelen parametreleri toplayıp geri döndürüyor. s1 nesnesini yarattıktan sonra sum(3,4) şeklinde çağrılırsa sonuç 7 olarak alınacaktır. Aynı interface'si aşağıdaki gibi de implement edelim :
SumInterface s2 = (x, y) -> 2*x + 2*y;
int sum2 = s2.sum(3, 4);
System.out.println("top 2 : " + sum2);
Bu örnekte s2 , sayıları önce iki ile çarpıp sonra toplamaktadır.
Normalde bir Runnable kullanmak için aşağıdaki gibi anonymous class yaratılır :
Runnable r1=new Runnable() {
@Override
public void run() {
System.out.println("Running...");
}
};
r1.run();
Aynı örnek lambda ile yapılırsa
Runnable r1 = () -> System.out.println("Running...");
r1.run();
Görüldüğü gibi kod daha kısa bir şekilde yazılmış olacaktır. run methodu parametre almadığı için () yazılması yeterlidir.
Normalde bir dizi Comparator ile kullanılıra aşağıdaki gibi kullanılmaktadır :
List<User> list=new ArrayList<User>();
list.add(new User("Ali Kemal"));
list.add(new User("Ahmet Kaya"));
list.add(new User("Deniz Sert"));
list.add(new User("Mehmet Temiz"));
Collections.sort(list,
new Comparator<User>(){
public int compare(User u1, User u2){
return u1.getName().compareTo(u2.getName());
}
}
);
for (User user : list) {
System.out.println(user.getName());
}
Yukarıdaki örneği Lambda ile yaparsak :
List<User> list=new ArrayList<User>();
list.add(new User("Ali Kemal"));
list.add(new User("Ahmet Kaya"));
list.add(new User("Deniz Sert"));
list.add(new User("Mehmet Temiz"));
Collections.sort(list,
(u1,u2) -> u1.getName().compareTo(u2.getName())
);
for (User user : list) {
System.out.println(user.getName());
}
Görüldüğü gibi kod daha sadeleşmiştir