Ламбдалар
Егер сіз ламбдалардың не екенін мүлде білмесеңіз, онда: Ламбда келесідей көрінеді:(a, b) -> a.compareTo(b)
(переменные) -> действие
Әзірге бұл жеткілікті. Теорияны мына жерден оқи аласыз: бірінші сілтеме , екінші сілтеме , бірақ менің ойымша, тәжірибе әлдеқайда қызықты. Мен сізге келесі есепті шешуді ұсынамын: 1-әдіспен калькулятор жазыңыз. Әдіс 2 сандық мәнді және басқа нәрсені қабылдауы керек. Сіздің codeыңыз келесідей болады:
class Lambda{
public static void main (String[] args) {
}
public static double calculate(){
return null;
}
}
Әдіс қолтаңбасына 3 параметрді енгізіп calculate
, ішіне 1 пәрменді қосып return
, осы әдісті шақыруды сынау керек main
. Бұл әдіс не істей алуы керек?
- бүктеу;
- көбейту;
- бөлу;
- шегеру;
- түбірін есептеу;
- күшке көтеру;
- бірінші + 117 санына бөлінген аргументтердің қосындысын дәрежеге көтеру;
- және сіз ойлай алатын кез келген басқа операциялар.
if-else
;char
операциялық көрсеткіш ретінде;switch-case
;- және сіздің ойыңызға келгеннің бәрі.
- Тек лямбдалар, тапсырма соларда.
inputStream
және олай емес OutputStream
. Бұл басқаша, қызықтырақ. Ағындар циклдарды толығымен емес, бірақ бәрібір ауыстырды. Оларға «қалай істеу керектігін түсіндірме, не істеу керектігін түсіндір» деген ұранмен қызмет көрсетіледі. Ағынның шағын мысалы:
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);
Мұнда не болып жатыр? Пікірлер қосайық:
myList.stream() // получить поток
.filter(s -> s.startsWith("c")) //отфильтровать значения, оставить те, что начинаются с «с»
.map(String::toUpperCase) // преобразовать все значения, перевести в верхний регистр
.sorted() // отсортировать по порядку (дефолтный порядо)
.forEach(System.out::println); // вывести каждый элемент на экран
Кәдімгі циклмен салыстырыңыз:
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);
}
Кодты оқығанда бәрі қорқынышты көрінеді, бірақ түсініктемелермен оңайырақ па? Бұл қалыпты жағдай, мен де ұзақ уақыт бойы оларды түсінбедім. Түсінудің кілті - тәжірибе. Сондықтан біз үшінші тарап мақалаларын оқи бастаймыз және сұрақтарымызға жауап іздейміз, сіз оларды осы жерден түсініктемелерде сұрай аласыз, мен толық жауап бермеймін, бірақ мен бағытты көрсетемін. JavaRush тапсырмаларының тізімі, менің ойымша, ағынмен жұмыс істеу үшін тамаша:
-
2208 - 1 ағынмен және 1 қайтарумен шешуге болады, яғни. әдістің негізгі бөлігі басталады
return
, содан кейін 1 тұтас ағын болады. Талапты алып тастайықStringBuilder
. -
1908 - оны 1 ағынмен және 1 қайтарумен де шешуге болады. Файлды оқудан бастаңыз. Мен ағындар арқылы файлға қалай жазу керектігін білмеймін (егер бұл мүмкін болса), қазір біз оны қолмен жасаймыз. Анау. Біз тек 2 ағынды ашамыз (консоль және файлға жазу). Біз файлды бізге парақ немесе ағын (google және javadoc) қайтаратын әдістер арқылы оқимыз.
-
1907 жыл - теориялық тұрғыдан оны бір ағымда шешуге болады. Ағынға кіріс файл атауы, шығыс - әлем сөздерінің саны.
-
1016 - сәл бұрмаланған жолмен, оны 1 ағынмен және 1 қайтарумен шешуге болады;
-
1821 - өте оңай және 1 ағында және 1 қайтарылады.
Бұл 2 тапсырма сізді басқа ағындық әдіспен және басқа коллектормен таныстырады.
-
1925 - бір ағында сөздері бар жолды алуға болады, содан кейін оны файлға жаза аласыз (файлға ағыннан жазуға болатынын білмеймін)
GO TO FULL VERSION