-
Interface metot statik olarak tanımlanabilir mi?
Java 8 interface değişiklikleri, statik metotları ve default metotları içermektedir. Java 8’den önce interfacelerde sadece metot tanımlamaları kullanılabilirdi fakat Java 8 ile birlikte statik ve default metotlar, interface içinde kullanılabilir.
-
Lambda nedir?
Lambda ifadesinin kullanımının özellikleri ve yapısı nedir?
Lambda, ayrı bir değişkene ayrılabilen ve daha sonrasında programın çeşitli yerlerinde tekrar çağırılabilen bir dizi talimattır.
Lambda ifadesinin temeli, ok işareti ile->ifade edilen lambda operatörüdür. Bu operatör lambda ifadesini iki parçaya böler: sol taraf ifade parametrelerinin listesini içerir, sağ taraf ise aksiyonun gerçekleştiği lambda ifadesinin gövdesini ifade eder.
Lambda ifadesi kendi başına çalışmaz fakat fonksiyonel arayüzde tanımlanan metodun uygulamasını oluşturur.
interface Operationable {
int calculate ( int x , int y );
}
public static void main ( String [] args) {
Operationable operation = (x, y) - > x + y;
int result = operation.calculate ( 10 , 20 );
System.out.println (result); // 30
}
Aslında lambda ifadeleri Java’da daha önce kullanılan anonim sınıfların kısa bir şeklidir.
- Ertelenmiş yürütme lambda ifadeleri - programın bir yerinde herhangi bir kez tanımlanır, gerekirse herhangi bir sayıda ve programın herhangi bir yerinde çağrılır.
- Lambda ifadesinin parametreleri, tür olarak fonksiyonel interface metotlarının parametrelerine karşılık gelmelidir:
operation = ( int x, int y) - > x + y;
// Lambda ifadesi kendi başına yazıldığında parametre tipi belirtilemez:
(x, y) - > x + y;
// Eğer metot herhangi bir parametreyi kabul etmezse boş parantezler yazılır, örneğin:
() - > 30 + 20 ;
// Eğer metot sadece bir parametreyi kabul ederse, parantezler kullanılmayabilir:
n - > n * n;\
- Sondaki lambda ifadelerinin herhangi bir değer döndürmesi gerekmez.
interface Printable {
void print( String s );
}
public static void main ( String [] args) {
Printable printer = s - > System.out.println(s);
printer.print("Hello, world");
}
Operationable operation = ( int x, int y) - > {
if (y == 0 ) {
return 0 ;
}
else {
return x / y;
}
};\
- Metot parametresi olarak lambda ifadesi kullanma
interface Condition {
boolean isAppropriate ( int n );
}
private static int sum ( int [] numbers, Condition condition) {
int result = 0 ;
for ( int i : numbers) {
if (condition.isAppropriate(i)) {
result + = i;
}
}
return result;
}
public static void main ( String [] args) {
System.out.println(sum ( new int [] { 0 , 1 , 0 , 3 , 0 , 5 , 0 , 7 , 0 , 9 }, (n) - > n ! = 0 ));
}-
Lambda ifadelerinin hangi değişkenlere erişimi var?
Bir lambda ifadesinden harici kapsam değişkenlerine erişim, anonim nesnelerden erişime çok benzer.
- immutable variables
- class fields
- static variables
Fonksiyonel interfacelerin default metotlarına lambda ifadesi içinde erişilmesine izin verilmez.
-
Lambda ifadesi kullanılarak string listesi nasıl sıralanır?
public static List < String > sort ( List < String > list) {
Collections.sort(list, (a, b) -> a.compareTo(b));
return list;
}-
Metot referansı nedir?