Lambdalar
Lambdaların nə olduğunu ümumiyyətlə bilmirsinizsə, onda: Lambda belə görünür:(a, b) -> a.compareTo(b)
(переменные) -> действие
Hələlik bu kifayətdir. Nəzəriyyəni burada oxuya bilərsiniz: bir keçid , ikinci keçid , amma məncə təcrübə daha əyləncəlidir. Aşağıdakı problemi həll etməyi təklif edirəm: 1-ci üsuldan istifadə edərək kalkulyator yazın. Metod 2 rəqəmsal dəyər və başqa bir şeyi qəbul etməlidir. Kodunuz belə görünəcək:
class Lambda{
public static void main (String[] args) {
}
public static double calculate(){
return null;
}
}
Metod imzasına 3 parametr daxil etməli calculate
, 1 əmr əlavə etməli return
və bu metodu çağıraraq test etməlisiniz main
. Bu üsul nəyi bacarmalıdır?
- qat;
- çoxaltmaq;
- bölmək;
- çıxmaq;
- kök hesablamaq;
- gücə yüksəltmək;
- birinci rəqəmə bölünən arqumentlərin cəmini + 117-yə yüksəlt;
- və ağlınıza gələn bütün digər əməliyyatlar.
if-else
;char
əməliyyat göstəricisi kimi;switch-case
;- və ağlınıza gələn hər şey.
- Yalnız lambdalar, vəzifə onların üzərindədir.
inputStream
və deyil OutputStream
. Fərqlidir, daha maraqlıdır. Axınlar dövrləri əvəz etdi, tamamilə yox, amma yenə də. Onlara “bunu necə edəcəyini izah etmə, nə edəcəyini izah et” devizi ilə xidmət edirlər. Kiçik bir axın nümunəsi:
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);
Burda nə baş verir? Şərhlər əlavə edək:
myList.stream() // получить поток
.filter(s -> s.startsWith("c")) //отфильтровать значения, оставить те, что начинаются с «с»
.map(String::toUpperCase) // преобразовать все значения, перевести в верхний регистр
.sorted() // отсортировать по порядку (дефолтный порядо)
.forEach(System.out::println); // вывести каждый элемент на экран
Adi bir döngə ilə müqayisə edin:
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);
}
Kodu oxuyanda hər şey qorxulu görünür, amma şərhlərlə daha asandır? Bu normaldır, mən də uzun müddət onları başa düşmürdüm. Anlamanın açarı təcrübədir. Buna görə də, üçüncü tərəfin məqalələrini oxumağa və suallarımıza cavab axtarmağa başlayırıq, siz də şərhlərdə buradan soruşa bilərsiniz, mən tam cavab verməyəcəyəm, amma istiqaməti göstərəcəyəm. Yayımla məşğul olmaq üçün əla olduğunu düşündüyüm JavaRush tapşırıqlarının siyahısı:
-
2208 - 1 axın və 1 dönüş ilə həll edilə bilər, yəni. metodun gövdəsi ilə başlayacaq
return
və sonra 1 tam axın olacaq. Tələbi buraxaqStringBuilder
. -
1908 - 1 axın və 1 dönüşlə də həll edə bilərsiniz. Faylı oxumaqla başlayın. Axınlar vasitəsilə fayla necə yazacağımı bilmirəm (əgər bu mümkündürsə), indi bunu əl ilə edirik. Bunlar. Yalnız 2 axın açırıq (konsol və fayla yazmaq). Faylı bizə vərəq və ya axın (google və javadoc) qaytaracaq üsullarla oxuyuruq.
-
1907 - nəzəri olaraq, bir axınla da həll edilə bilər. Axına giriş fayl adıdır, çıxış dünya sözlərinin sayıdır.
-
1016 - bir az pozulmuş şəkildə, 1 axın və 1 dönüşdə həll edə bilərsiniz;
-
1821 - çox asan və 1 axın və 1 qayıdışda.
Bu 2 tapşırıq sizi başqa axın metodu və başqa kolleksiyaçı ilə tanış edəcək.
-
1925 - bir axındakı sözlərdən ibarət bir sətir əldə edə və sonra onu fayla yaza bilərsiniz (bir axından fayla yazmağın mümkün olub olmadığını bilmirəm)
GO TO FULL VERSION