Lambdalar
Agar siz lambdalar nima ekanligini umuman bilmasangiz, unda: Lambda quyidagicha ko'rinadi:(a, b) -> a.compareTo(b)
(переменные) -> действие
Hozircha bu yetarli. Siz nazariyani bu yerda o'qishingiz mumkin: birinchi havola , ikkinchi havola , lekin menimcha, amaliyot ancha qiziqarli. Men sizga quyidagi muammoni hal qilishni taklif qilaman: 1-usul yordamida kalkulyator yozing. Usul ikkita raqamli qiymatni va boshqa narsalarni qabul qilishi kerak. Sizning kodingiz shunday ko'rinadi:
class Lambda{
public static void main (String[] args) {
}
public static double calculate(){
return null;
}
}
Usul imzosiga 3 ta parametrni kiritishingiz calculate
, 1 ta buyruqni kiritishingiz return
va ushbu usulni chaqirishni sinab ko'rishingiz kerak main
. Bu usul nimaga qodir bo'lishi kerak?
- katlama;
- ko'paytirmoq;
- bo'lmoq;
- ayirish;
- ildizni hisoblash;
- kuchga ko'tarish;
- argumentlar yig'indisini birinchi raqamga + 117 ga bo'lingan kuchga ko'taring;
- va siz o'ylashingiz mumkin bo'lgan barcha boshqa operatsiyalar.
if-else
;char
operatsiya ko'rsatkichi sifatida;switch-case
;- va xayolingizga kelgan hamma narsa.
- Faqat lambdalar, vazifa ularda.
inputStream
va yo'q OutputStream
. Bu boshqacha, qiziqroq. Oqimlar tsikllarni almashtirdi, to'liq emas, lekin baribir. Ularga "buni qanday qilishni tushuntirmang, nima qilishni tushuntiring" shiori bilan xizmat qiladi. Oqimning kichik misoli:
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);
Bu yerda nima bo'lyapti? Keling, sharhlar qo'shamiz:
myList.stream() // получить поток
.filter(s -> s.startsWith("c")) //отфильтровать значения, оставить те, что начинаются с «с»
.map(String::toUpperCase) // преобразовать все значения, перевести в верхний регистр
.sorted() // отсортировать по порядку (дефолтный порядо)
.forEach(System.out::println); // вывести каждый элемент на экран
Oddiy halqa bilan solishtiring:
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);
}
Kodni o'qiganingizda, hamma narsa qo'rqinchli ko'rinadi, ammo sharhlar bilan osonroqmi? Bu normal holat, men ham ularni uzoq vaqt tushunmadim. Tushunishning kaliti bu amaliyotdir. Shuning uchun biz uchinchi tomon maqolalarini o'qishni boshlaymiz va savollarimizga javob izlaymiz, siz ularni sharhlarda ham so'rashingiz mumkin, men to'liq javob bermayman, lekin men yo'nalishni ko'rsataman. JavaRush-dan strimingni mashq qilish uchun ajoyib deb hisoblagan vazifalar ro'yxati:
-
2208 - 1 oqim va 1 qaytish bilan hal qilinishi mumkin, ya'ni. usulning tanasi boshlanadi
return
va keyin 1 butun oqim bo'ladi. Keling, talabni chetlab o'tamizStringBuilder
. -
1908 yil - siz uni 1 oqim va 1 qaytish bilan ham hal qilishingiz mumkin. Faylni o'qishdan boshlang. Oqimlar orqali faylga qanday yozishni bilmayman (agar bu mumkin bo'lsa), biz buni qo'lda qilamiz. Bular. Biz faqat 2 ta oqimni ochamiz (konsol va faylga yozish). Biz faylni bizga varaq yoki oqim (google va javadoc) qaytaradigan usullar orqali o'qiymiz.
-
1907 yil - nazariy jihatdan uni bir oqimda ham hal qilish mumkin. Oqimga kirish fayl nomi, chiqish dunyo so'zlari soni.
-
1016 - biroz buzuq tarzda, siz 1 oqim va 1 qaytishda hal qilishingiz mumkin;
-
1821 - juda oson va 1 oqim va 1 qaytishda.
Ushbu 2 vazifa sizni boshqa oqim usuli va boshqa kollektor bilan tanishtiradi.
-
1925 yil - siz bitta oqimda so'zlardan iborat qatorni olishingiz va keyin uni faylga yozishingiz mumkin (faylga oqimdan yozish mumkinligini bilmayman)
GO TO FULL VERSION