Middle
Ի՞նչ նպատակով են օգտագործվում հոսքերը Java-ի նոր տարբերակում:
sobes.tech AI
Պատասխան AI-ից
Java 8+-ի հոսքերը օգտագործվում են տվյալների հաջորդականությունների դեկլարատիվ մշակման համար: Դրանք թույլ են տալիս կատարել ֆունկցիոնալ օպերացիաներ հավաքածուների (ցուցակներ, հավաքածուներ), զանգվածների կամ այլ տվյալների աղբյուրների վրա շղթայական ոճով:
Հիմնական առավելությունները՝
- Դեկլարատիվ ոճ: Դրանք թույլ են տալիս նկարագրել՝ "ինչ" պետք է անել տվյալների հետ, ոչ թե "ինչպես": Սա դարձնում է կոդը ավելի ընթեռնելի և հասկանալի:
- Կենդանի հաշվարկներ: Օպերացիաները կատարվում են միայն անհրաժեշտության դեպքում, ինչը կարող է բարձրացնել արտադրողականությունը, հատկապես մեծ տվյալների դեպքում:
- Համատեղ մշակում: Հոսքերը հեշտությամբ կարող են համատեղ մշակվել (
parallelStream()-ի օգտագործմամբ), ինչը թույլ է տալիս արդյունավետ օգտագործել բազմակորքային պրոցեսորները: - Շաբլոնային կոդի նվազեցում: Փոխարինում են ավանդական ցիկլերը և ինտերատորները ավելի արտահայտիչ և կարճ կառուցվածքներով:
- Անփոփոխելիություն: Հոսքերը չեն փոխում սկզբնական տվյալների աղբյուրը:
Հաճախ օգտագործվող օպերացիաների օրինակներ՝
- Ֆիլտրում:
filter()- տարրերի ընտրություն պայմանով: - Փոխակերպում (մապինգ):
map()- յուրաքանչյուր տարրի փոխակերպում: - Տեսակավորում:
sorted()- տարրերի դասավորություն: - Անհատական տարրեր:
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]