Video: Lambda Calculus ve Fonksiyonel Programlama (Java Eğitim 8) Part 1/2 2024
Java, akışları ve lambda ifadelerinden en iyi şekilde yararlanan fantezi yöntemlere sahiptir. Dereler ve lambda ifadeleri ile bir montaj hattı oluşturabilirsiniz. Montaj hattı çözümü, fonksiyonel programlamadan gelen kavramları kullanır.
Montaj hattı birkaç yöntemden oluşur. Her yöntem, verileri alır, veriyi bir şekilde veya başka bir biçimde dönüştürür ve sonuçlarını bir sonraki satırdaki metoda verir. İşte bir montaj hattı.
Her bir kutu, bir montaj hattı boyunca dönüşüm sağladığı için bir grup hammaddenin temsilidir. Her ok bir metodu (veya metaforik olarak, montaj hattındaki bir işçiyi) temsil eder.
Örneğin, ikinci kutudan üçüncü kutuya geçişte, bir işçi yöntemi (
filtre
yöntemi) DVD olmayan öğelerin satışlarını azaltıyor. Lucy Ricardo'nun ikinci ve üçüncü kutular arasında durduğunu, her kitabı veya CD'yi montaj hattından çıkarıp tabana dikkatsizce attığını düşünün.
Java'nın
filtre
yönteminin parametresi,
Faturalama
-
boolean
olan bir lambda ifadedir.
filtre
yöntemi, lambda ifadesinin
doğru / yanlış
testini geçmeyen öğeleri siler.
Yöntem Adı | Üye | Parametre (ler) | Sonuç Türü | Sonuç Değeri |
Akım
|
Koleksiyon
(örneğin
ArrayList
, nesne) |
(none) |
Akış
|
Koleksiyon |
filtresinin
|
Akışı
|
Faturalama
|
Akış öğelerini tüküren bir akış > Lambda ifadesinin döndürdüğü değerleri içeren yeni bir akış
|
true
map
|
Stream
|
İşlev
|
Stream
|
Gelen akıma lambda ifadesinin uygulanması sonuçlarını içeren yeni bir akış
|
azaltın |
Akış
|
İkili Operatör
|
|
İkili Operatör
tarafından kullanılan türü Gelen akıştaki tüm değerleri birleştiren sonuç
|
harita yöntemi) her
fiyatından
fiyat
Satılık
. İşçinin bulunduğu yerden itibaren montaj hattı yalnızca
fiyat
değerlerini içerir.
Daha kesin olmak gerekirse, Java'nın
harita
yöntemi,
(satış) -> satış gibi bir
İşlev
alır. getFice ()
ve bir akışın her bir değerine
İşlev
'i uygular. Bu nedenle,
map
yöntemi,
satış
nesnelerinin akışını alır ve bir
fiyat
değerinde giden bir akış oluşturur.
Dördüncü kutudan beşinci kutuya geçişte bir işçi yöntemi (
azalt
yöntemi), DVD satışlarının fiyatlarını artırır.Java'nın
azalt
yöntemi iki parametre alır:
İlk parametre bir başlangıç değeridir.
Yukarıdaki resimde, başlangıç değeri
0'dır. 0
.
İkinci parametre
Çift İşlevli
'dır.
Yukarıdaki resimde,
azalt yönteminin
İkili Operatör
(fiyat1, fiyat2) -> fiyat1 + fiyat2
azaltın
yöntemidir
BinaryOperator
'ı kullanır ve gelen akışın değerlerini birleştirir. Başlangıç değeri tüm birleştirmenin başlangıç noktası olarak kullanılır. Yani,
azalt
yöntemi iki ekleme yapar.
reduce yöntemi, gelen bir akıştan iki değer ekler.
Karşılaştırma için,
yöntemini çağırarak değerler
azaltmayı düşünün. 0
,
2. 0
ve
5. 0
. Ortaya çıkan eylem aşağıda
altında gösterilmektedir. İndirme yöntemi, gelen bir akışın değerlerini çarpar.
Google'ın MapReduce programlama modelini duymuş olabilirsiniz. Programlama modelinin adı ile Java yöntem adları
eşlem
azaltmak
arasındaki benzerlik tesadüf değildir.
Bir bütün olarak ele alındığında, tüm montaj satışı DVD'lerin fiyatlarını sattı. Yukarıdaki kod, akışları ve lambda ifadelerini yukarıdaki ilk resmi kullanarak eksiksiz bir program içerir.
import java. Metin. NumberFormat;
import java. util. ArrayList;
public class TallySales {
public static void main (String [] args) {
ArrayList
sales = new ArrayList <> ();
NumberFormat currency = NumberFormat. getCurrencyInstance ();
fillTheList (satış);
. filtre ((satış) -> satış.getItem (). equals ("DVD"))
. harita ((satış) -> satış. getPrice ())
. azaltmak (0,0, (fiyat1, fiyat2) -> fiyat1 + fiyat2);
Sistem. dışarı. println (para birimi biçimi (toplam));
}
static void fillTheList (ArrayList
satış) {
satış. eklemek (yeni Satış ("DVD", 15.00));
satış. eklemek (yeni Satış ("Kitap", 12.00));
satış. eklemek (yeni Satış ("CD", 5. 25));
}
}
Kod, Java 8 veya üstünü gerektirir. IDE'niz önceki bir Java sürümüne ayarlıysa, IDE ayarlarıyla bağlantı kurmanız gerekebilir. Hatta Java'nın daha yeni bir sürümünü indirmeniz gerekebilir.
Kalınlık büyük bir Java atama ifadesi. Deyiminin sağ tarafında bir dizi yöntem çağrısı bulunur. Her yöntem çağrısı bir nesne döndürür ve bu tür her nesne sonraki yöntem çağrısında nokta önündeki şeydir. Montaj hattını böyle biçimliyorsunuz.
Örneğin, kalın kodun başlangıcına yakın bir yerde
satış
adı
ArrayList
nesnesine karşılık gelir. Her
ArrayList
nesnesinde
akış
yöntemi bulunur. Yukarıdaki kodda
satış. stream ()
,
ArrayList
nesnesinin
akış
yöntemine yapılan çağrıdır.
Akış yöntemi, Java'nın
Akış
sınıfının bir örneğini döndürür. (Ne sürpriz!) So
satış. stream ()
Akış
nesnesini belirtir.
Tüm DVD satışlarını elde etmek.
Her
Akış
filtre
yöntemine sahiptir. Yani
satış. Akış().
,
Stream
nesnesinin
filtre
yöntemini çağıran addType (). equals ("DVD")).
Desen devam ediyor.
Akış
nesnesinin
harita
yöntemi, fiyatları içeren bir
Akış
nesnesi olan başka bir
Akış
nesnesi döndürür.
Her bir DVD satışından fiyata ulaşma.
Bu
Akış
azaltın
yöntemini uygulayarak, bir DVD fiyatının toplamından bir
çift
değer elde edersiniz.
Tüm DVD satışlarının toplam bedelini elde etmek.