Lambda
Jika Anda sama sekali tidak tahu apa itu lambda, maka: Lambda terlihat seperti ini:(a, b) -> a.compareTo(b)
(переменные) -> действие
Itu sudah cukup untuk saat ini. Anda bisa membaca teorinya di sini: link one , link two , tapi menurut saya latihannya jauh lebih menyenangkan. Saya sarankan Anda menyelesaikan soal berikut: Tulis kalkulator menggunakan metode 1. Metode ini harus menerima 2 nilai digital dan yang lainnya. Kode Anda akan terlihat seperti ini:
class Lambda{
public static void main (String[] args) {
}
public static double calculate(){
return null;
}
}
Anda perlu memasukkan 3 parameter dalam tanda tangan metode calculate
, menambahkan 1 perintah return
dan menguji pemanggilan metode ini main
. Apa yang seharusnya bisa dilakukan oleh metode ini?
- melipat;
- berkembang biak;
- membagi;
- mengurangi;
- hitung akarnya;
- meningkatkan kekuatan;
- pangkatkan jumlah argumen dibagi angka pertama + 117;
- dan semua operasi lain yang dapat Anda pikirkan.
if-else
;char
sebagai indikator operasi;switch-case
;- dan segala hal lain yang terlintas dalam pikiran Anda.
- Hanya lambda, tugasnya ada pada mereka.
inputStream
dan bukan itu OutputStream
. Berbeda, lebih menarik. Aliran telah menggantikan siklus, tidak sepenuhnya, tapi tetap saja. Mereka disuguhkan dengan motto “jangan jelaskan bagaimana melakukannya, jelaskan apa yang harus dilakukan.” Contoh kecil aliran:
List<String> myList = Arrays.asList("a1", "a2", "b1", "c2", "c1");
myList.stream()
.filter(s -> s.startsWith("c"))
.map(String::toUpperCase)
.sorted()
.forEach(System.out::println);
Apa yang terjadi di sini? Mari tambahkan komentar:
myList.stream() // получить поток
.filter(s -> s.startsWith("c")) //отфильтровать значения, оставить те, что начинаются с «с»
.map(String::toUpperCase) // преобразовать все значения, перевести в верхний регистр
.sorted() // отсортировать по порядку (дефолтный порядо)
.forEach(System.out::println); // вывести каждый элемент на экран
Bandingkan dengan loop biasa:
List<String> toSort = new ArrayList<>();
for(String s : myList){
if(s.startsWith("c")){
toSort.add(s.toUpperCase());
}
}
Collections.sort(toSort);
for(String s : toSort){
System.ouy.println(s);
}
Saat Anda membaca kodenya, semuanya tampak menakutkan, tetapi apakah lebih mudah dengan komentar? Ini normal, saya juga sudah lama tidak memahaminya. Kunci untuk memahami adalah latihan. Oleh karena itu, kami mulai membaca artikel pihak ketiga dan mencari jawaban atas pertanyaan kami, Anda juga dapat menanyakannya di sini di komentar, saya tidak akan memberikan jawaban lengkap, tetapi saya akan menunjukkan arahnya. Daftar tugas dari JavaRush yang menurut saya bagus untuk berlatih streaming:
-
2208 - dapat diselesaikan dengan 1 aliran dan 1 pengembalian, mis. isi metode ini akan dimulai
return
dan kemudian akan ada 1 aliran utuh. Mari kita hilangkan persyaratannyaStringBuilder
. -
1908 - Anda juga dapat menyelesaikannya dengan 1 aliran dan 1 pengembalian. Dimulai dengan membaca file. Saya tidak tahu cara merekam ke file melalui stream (jika memungkinkan), untuk saat ini kami melakukannya secara manual. Itu. Kami hanya membuka 2 aliran (konsol dan menulis ke file). Kami membaca file melalui metode yang akan mengembalikan kami berupa sheet atau stream (google dan javadoc).
-
1907 - secara teori, ini juga dapat diselesaikan dalam satu aliran. Masukan ke aliran adalah nama file, keluarannya adalah jumlah kata dunia.
-
1016 - dengan cara yang sedikit menyimpang, Anda dapat menyelesaikannya dalam 1 aliran dan 1 pengembalian;
-
1821 - sangat mudah dan dalam 1 aliran dan 1 pengembalian.
2 tugas ini akan memperkenalkan Anda pada metode streaming lain dan kolektor lain.
-
1925 - Anda bisa mendapatkan baris kata-kata dalam satu aliran dan kemudian menulisnya ke file (saya tidak tahu apakah mungkin untuk menulis ke file dari aliran)
GO TO FULL VERSION