SORU
21 Mart 2014, Cuma


Java 8 akarsu'ler .(dk) ve .() max: neden bu derleme?

Not: bu soru bir önceki KADAR sorusu olan ölü bir link kaynaklanır, ama işte söylüyorum

Bu kod (not: bu kodu olmayacağını biliyorum "Integer::compare -- kullanılması gereken" ve sadece bağlantılı soru) çıkarılan iş:

final ArrayList <Integer> list 
    = IntStream.rangeClosed(1, 20).boxed().collect(Collectors.toList());

System.out.println(list.stream().max(Integer::max).get());
System.out.println(list.stream().min(Integer::min).get());

.min() .max(), javadoc göre her iki bağımsız değişken Comparator olmalıdır. Henüz burada yöntemi referanslar Integer sınıf statik yöntemler vardır.

Neden bu derleme?

CEVAP
21 Mart 2014, Cuma


Belli değil, çünkü burada neler olduğunu açıkla!

İlk olarak, [Stream.max()] kabul eder örneği Comparator böylece öğeler akışı karşılaştırır karşı birbirlerini bulmak için minimum ya da maksimum, bazı optimal için bu hiç gerek yok, çok fazla endişe hakkında.

Soru, tabii ki, neden Integer::max kabul etti? Sonuçta bir karşılaştırma değil!

Cevap yeni lambda işlevleri Java 8'de çalışır. Gayri resmi "arayüzleri, ya da" SAM "arabirimleri." soyut tek yöntem olarak bilinen bir kavram dayanır Ana fikir, bir soyut yöntem ile herhangi bir arabirim otomatik olarak arayüzünde bir yöntem için bir maç olan lambda - veya referans yöntemi ile uygulanabilir. Yani Comparator arabirim (basit sürüm) incelenmesi:

public Comparator<T> {
    int compare(T o1, T o2);
}

Eğer bir yöntem ** 14, sonra arıyorsa aslında bu imza arıyor:

int xxx(Integer o1, Integer o2);

Kullanıyorum "" . xxx ^strong>yöntem adı eşleşen bir amaç için kullanılamaz, çünkü.

Bu nedenle, Integer.min(int a, int b) Integer.max(int a, int b) hem autoboxing bu bir yöntem Comparator<Integer> içerik olarak görünmesini sağlayacak yeterince yakın.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ama Jenna

    Ama Jenna

    29 NİSAN 2011
  • DudeFromUkraine

    DudeFromUkra

    7 Ocak 2008
  • Jaclyn W

    Jaclyn W

    5 Mayıs 2006