Lambda va Stream API
Daraja: O'rta
Lambda — qisqa anonim funksiya (`x -> x * 2`). Stream — kolleksiya ustida quvur (pipeline) qurish usuli: filter/map/sorted oraliq amallar, collect/count/forEach terminal amallar. Stream ma'lumotni o'zgartirmaydi, yangisini qaytaradi va terminal amal chaqirilmaguncha hech narsa bajarilmaydi.
Tushuntirish
Lambda — qisqa anonim funksiya (`x -> x * 2`). Stream — kolleksiya ustida quvur (pipeline) qurish usuli: filter/map/sorted oraliq amallar, collect/count/forEach terminal amallar. Stream ma'lumotni o'zgartirmaydi, yangisini qaytaradi va terminal amal chaqirilmaguncha hech narsa bajarilmaydi.
Kod misoli
List<String> ismlar = List.of("Ali", "Vali", "Guli", "Anvar");
List<String> natija = ismlar.stream()
.filter(s -> s.startsWith("A"))
.map(String::toUpperCase)
.sorted()
.toList(); // [ALI, ANVAR]
Map<Integer, List<String>> uzunlikBoyicha =
ismlar.stream().collect(Collectors.groupingBy(String::length));
double ortacha = ismlar.stream().mapToInt(String::length).average().orElse(0);
Keng tarqalgan xatolar
- Terminal amalsiz stream — hech narsa bajarilmaydi (lazy).
- Bitta stream'ni ikki marta ishlatish — IllegalStateException.
Mashqlar
- Sonlar ro'yxatidan juftlarini olib, kvadratini hisoblab, yig'indisini top.
- Obyektlar ro'yxatini groupingBy bilan kategoriya bo'yicha guruhla.
Teglar: lambda, funksional, stream