Middle
Javaнын жаңы версиясында агымдар эмне үчүн колдонулат?
sobes.tech AI
AIден жооп
Java 8+теги агымдары маалыматтын үзүндүлөрүн декларативдүү иштетүү үчүн колдонулат. Алар коллекциялар (тизмелер, топтомдор), массивдер же башка маалымат булактары боюнча функционалдык операцияларды конвейердик стильде аткарууга мүмкүндүк берет:
Негизги артыкчылыктары:
- Декларативдүү стиль: "эчт" керек экенин сүрөттөө мүмкүнчүлүгүн берет, "кантип" эмес. Бул кодду окуу жана түшүнүү оңой кылат.
- Кескин эсептөөлөр: Операциялар керектүү учурда гана ишке ашырылат, бул чоң маалыматтар менен иштөөдө натыйжалуулукты жогорулатышы мүмкүн.
- Параллелдүү иштетүү: Агымдар оңой эле параллелденет (
parallelStream()колдонуу менен), бул көп ядролук процессорлорду эффективдүү пайдаланууга мүмкүндүк берет. - Шаблондук коддун азайышы: Традициялык циклдер жана итераторлорду көбүрөөк түшүнүктүү жана кыска конструкциялар менен алмаштырат.
- Иммутабелдик: Агымдар баштапкы маалымат булагын өзгөртпөйт.
Көп колдонулган операциялардын мисалдары:
- Фильтрация:
filter()- шартка ылайык элементтерди тандоо. - Өзгөртүү (маппинг):
map()- ар бир элементти өзгөртүү. - Иреттөө:
sorted()- элементтерди иреттөө. - Unique элементтер:
distinct()- дублдуулардын жоготулушу. - Группировка:
collect(Collectors.groupingBy(...))- белгилүү бир белгиге ылайык топтоо. - Статистика/Агрегация:
count(),sum(),average(),max(),min(),reduce()- агрегаттык операциялар. - Жыйынтыктарды коллекцияга топтоо:
collect(Collectors.toList()),collect(Collectors.toSet())- жыйынтыктарды топтоо.
Колдонуу мисалы:
// Тизмедеги саптарды фильтрлөө жана өзгөртүү агымын колдонуу
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");
List<String> filteredNames = names.stream() // Тизмеден агым түзүү
.filter(name -> name.startsWith("A")) // Фильтрлөө: "A" менен башталган аттарды калтыруу
.map(String::toUpperCase) // Өзгөртүү: ар бир атты чоң тамгага айлантуу
.collect(Collectors.toList()); // Натыйжаны жаңы тизмеге топтоо
System.out.println(filteredNames); // Чыгуу: [ALICE]