search
Giriş
Merhabalar arkadaşlar, Sitemizi programlama ile ilgilenen bütün arkadaşlarımızın Türkçe içerik konusunda çektiği sıkıntılar düşünülerek soru/cevap şeklinde bir etkileşimde bulunabilmesi için kurduk. Umuyoruz hepimiz için güzel bir deneyim olur. Hasscript Ekibi
0 oy
674 gösterim
Lambda Expression ve Anonymous class arasındaki fark nedir?

Lamda epression anonim bir fonksiyon diye biliyorum. Yani Anonim bir functional interface class'ı Hatta @FunctionalInterface kullanılıyor,.
Java kategorisinde 2.0k puan
Güzel. Bak hiç düşünmemiştim bu konuda. İyi soru olmuş.

1 cevap

0 oy

Olayı birkaç açıdan düşünelim. Anoymous sınıflar java'da herhalde ilk versiyonlardan bu yana var. Lambda 1.8 yeni adıyla 8. versiyondan sonra eklendi. Anonymous sınıf yazmakla lambda yazmanın farkı; lambda yazmak kod yazmayı biraz azaltıyor, kolaylaştırıyor. Aynı örneği bir anonymous bir de lambda ile yazalım.

Önce anonymous sınıf.

package ornek;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;

public class AnonymousClassExample {
	public static void main(String[] args) {
		List<Double> list = new ArrayList<>();
		for (int i = 0 ; i < 100 ; i++) {
			list.add(Math.random());
		}
		
		list.forEach(new Consumer<Double>() {
			@Override
			public void accept(Double t) {
				System.out.println(t);
			}
		});
	}
}

Bu sınıfı yazıp sınıfımızı derlersek bize aşağıdaki gibi iki tane class dosyası oluşturuyor.

İlki AnonymousClassExample.class diğeri ise AnonymousClassExample$1.class Bunu zaten daha önceden biliyorduk. Java sınıfları derlerken eğer sınıf içinde bir anonymous sınıf varsa bunu ayrı bir sınıf olarak çıkarıyor. Beni şaşırtan kısım aşağıdaki kodun sonunda oldu.

package ornek;

import java.util.ArrayList;
import java.util.List;

public class Lambda {
	public static void main(String[] args) {
		List<Double> list = new ArrayList<>();
		for (int i = 0 ; i < 100 ; i++) {
			list.add(Math.random());
		}
		
		list.forEach(e-> System.out.println(e));
		list.stream().forEach(e->System.out.println(e));
	}
}


Burada ise aynı kodu hem direk aynı metod ile hem de stream üzerinden lambda kullanarak denedim. Önceki görselde göreceğiniz üzere Lambda.class dosyası çıktı. Başka bir dosya oluşturmadı.

Kodları decompile ettiğim zaman aynen geri çıktı.

Sonuç olarak lambda yazdığımız zaman başka bir sınıf oluşturmadan derleyici/yorumlayıcı düzeyinde konu normal kod gibi devam ediyor.

AnonymousClass yazdığımız zaman ise bu başka bir sınıf gibi algılanıp derleniyor. Proje derleme aşamasında birbirine bağlanıyor.

Lambda fonksiyonlarında şunu hatırlıyorum; collection için stream kullanıyorsan map, foreach, filter gibi fonksiyonlar üzerinde performans iyileştirmeleri var. For kullanmakdan daha performanslı olduğunu iddia ediyorlar.

 

6.2k puan

İlgili sorular

0 oy
2 cevap 1.2K gösterim
1.2K gösterim
Java'da Set , HashSet ve TreeSet arasında ne fark vardır?
1 Ekim 2020 Java kategorisinde tolgacelik.art 2.0k puan sordu
0 oy
1 cevap 1.3K gösterim
1.3K gösterim
Selamlar, Ben bir webservis yazmaya çalışıyorum. Değerleri @PathParam ile aldığım zaman ( http://localhost/servis/sayfa/birinci_deger/ikinici_deger ) şeklinde url den giriş yapınca program çalışıyor. Verdiğim değerleri içerde döndürebiliyorum. Ama benden istenen ( ... =AAAA&ikinci_deger=BBBB ) şeklinde olması. Araştırdığım kadarıyla bu da @RequestParam oluyor. Bunlar arasında ki fark nedir ?
16 Mayıs 2020 Java kategorisinde kupanintorunu 365 puan sordu
0 oy
1 cevap 570 gösterim
570 gösterim
Java JDBC de Statement ve PreparedStatement kullanımları aynı gibi duruyor. Statement ve PreparedStatement arasında ne fark var?
23 Haziran 2021 Java kategorisinde canonka 334 puan sordu
0 oy
1 cevap 775 gösterim
775 gösterim
Herkese merhaba, Spring Data Mongo kullanılan bir projede MongoTemplate ile MongoRepository interface i arasındaki farklar nelerdir ? Şimdiden teşekkürler,
13 Mayıs 2017 Veri Tabanı kategorisinde akotako 176 puan sordu
0 oy
1 cevap 1.3K gösterim
1.3K gösterim
Java programa dilinde Error ve Exception kavramları diğer dillerde de var mı öncelikle? İkinci olarak bu iki teri arasındaki temel ve genel farklar nelerdir?
1 Eylül 2018 Java kategorisinde tolgacelik.art 2.0k puan sordu