Lambdas
Jika anda tidak tahu apa itu lambda, maka: Lambda kelihatan seperti ini:(a, b) -> a.compareTo(b)
(переменные) -> действие
Cukuplah setakat ini. Anda boleh membaca teori di sini: pautan satu , pautan dua , tetapi saya fikir latihan adalah lebih menyeronokkan. Saya cadangkan anda menyelesaikan masalah berikut: Tulis kalkulator menggunakan kaedah 1. Kaedah ini harus menerima 2 nilai digital dan sesuatu yang lain. Kod anda akan kelihatan seperti ini:
class Lambda{
public static void main (String[] args) {
}
public static double calculate(){
return null;
}
}
Anda perlu memasukkan 3 parameter dalam tandatangan kaedah calculate
, tambah 1 arahan return
dan uji memanggil kaedah ini dalam main
. Apakah kaedah ini boleh dilakukan?
- lipat;
- membiak;
- bahagikan;
- tolak;
- hitung punca;
- meningkatkan kuasa;
- naikkan kepada kuasa jumlah hujah dibahagikan dengan nombor pertama + 117;
- dan semua operasi lain yang boleh anda fikirkan.
if-else
;char
sebagai penunjuk operasi;switch-case
;- dan segala-galanya yang terlintas di fikiran anda.
- Hanya lambda, tugas ditanggung mereka.
inputStream
dan tidak OutputStream
. Ia berbeza, ia lebih menarik. Strim telah menggantikan kitaran, tidak sepenuhnya, tetapi masih. Mereka dihidangkan dengan moto "jangan terangkan cara melakukannya, terangkan apa yang perlu 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 berlaku di sini? Mari tambah komen:
myList.stream() // получить поток
.filter(s -> s.startsWith("c")) //отфильтровать значения, оставить те, что начинаются с «с»
.map(String::toUpperCase) // преобразовать все значения, перевести в верхний регистр
.sorted() // отсортировать по порядку (дефолтный порядо)
.forEach(System.out::println); // вывести каждый элемент на экран
Bandingkan dengan gelung 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);
}
Apabila anda membaca kod, semuanya kelihatan menakutkan, tetapi adakah lebih mudah dengan komen? Ini adalah perkara biasa, saya juga tidak memahami mereka untuk masa yang lama. Kunci untuk memahami adalah amalan. Oleh itu, kami mula membaca artikel pihak ketiga dan mencari jawapan kepada soalan kami, anda juga boleh bertanya kepada mereka di sini dalam komen, saya tidak akan memberikan jawapan penuh, tetapi saya akan menunjukkan arahnya. Senarai tugas daripada JavaRush yang saya fikir bagus untuk berlatih penstriman:
-
2208 - boleh diselesaikan dengan 1 aliran dan 1 pulangan, i.e. badan kaedah akan bermula dengan
return
dan kemudian akan ada 1 aliran keseluruhan. Mari tinggalkan keperluan ituStringBuilder
. -
1908 - anda juga boleh menyelesaikannya dengan 1 aliran dan 1 pulangan. Bermula dengan membaca fail. Saya tidak tahu cara merakam ke fail melalui strim (jika ini boleh), buat masa ini kami melakukannya secara manual. Itu. Kami hanya membuka 2 aliran (konsol dan menulis ke fail). Kami membaca fail melalui kaedah yang akan mengembalikan kami sama ada helaian atau aliran (google dan javadoc).
-
1907 - secara teori, ia juga boleh diselesaikan dalam satu aliran. Input kepada strim ialah nama fail, output ialah bilangan perkataan dunia.
-
1016 - dengan cara yang sedikit sesat, anda boleh menyelesaikannya dalam 1 aliran dan 1 pulangan;
-
1821 - sangat mudah dan dalam 1 aliran dan 1 pulangan.
2 tugasan ini akan memperkenalkan anda kepada kaedah penstriman lain dan pengumpul lain.
-
1925 - anda boleh mendapatkan baris dengan perkataan dalam satu aliran dan kemudian menulisnya ke fail (saya tidak tahu sama ada mungkin untuk menulis ke fail dari aliran)
GO TO FULL VERSION