Sobes.tech
Middle

Ինչու՞ նոր տարբերակում Java-ում օգտագործվում են հոսքեր:

sobes.tech AI

Պատասխան AI-ից

Java-ի նոր տարբերակներում (սկսած Java 8-ից) 스트րիմների օգտագործումը կապված է արդյունավետության, կոդի ընթեռնելիության և տվյալների հոսքային մշակման հետ կապված մի շարք պատճառների հետ:

  • Ֆունկցիոնալ ծրագրավորում: 스트րիմները թույլ են տալիս գրել կոդը ավելի դեկլարատիվ ոճով, կենտրոնանալով այն բանի վրա, թե ինչ պետք է անել տվյալների հետ, ոչ թե ինչպես։ Սա բարելավում է ընթեռնելիությունը և պահպանելիությունը:
  • Համաժամանակյա մշակումը: 스트րիմները հեշտությամբ թույլ են տալիս բաժանել տվյալների մշակման գործողությունները parallelStream()-ի միջոցով։ JVM-ը կառավարում է տվյալների բաժանումը և արդյունքների միավորումը, ինչը հեշտացնում է բազմակամ ծրագրերի զարգացումը:
  • Արդյունավետություն: Լենիվ գնահատում (lazy evaluation) 스트რիմներում նշանակում է, որ գործողությունները կատարվում են միայն անհրաժեշտության դեպքում, ինչը նվազեցնում է լրացուցիչ ծախսերը։ Միջանկյալ գործողությունները (map, filter) չեն հանգեցնում անմիջական կատարման մինչև տերմինալ գործողության (collect, forEach) կոչը:
  • Կոնկրետացված հավաքածուների մշակումը: Ներկայացնում են ստանդարտ, բարձր մակարդակի գործողությունների հավաքածու՝ ֆիլտրում, մապավորում, տվյալների ամփոփում, ինչը նվազեցնում է ցիկլերով գրած կոդի քանակը:
  • Անփոփոխ գործողություններ: 스트რիմները չեն փոխում սկզբնական հավաքածուն, որի վրա հիմնված են, պահպանում են անփոփոխության սկզբունքները և հեշտացնում են սխալների հայտնաբերում:
// Օրինակ՝ 스트რիմների օգտագործում ֆիլտրում և մապավորում
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");

List<String> filteredNames = names.stream() // Ստեղծում 스트րիմ
                                  .filter(name -> name.startsWith("C")) // Ֆիլտրում
                                  .map(String::toUpperCase) // Մապավորում
                                  .collect(Collectors.toList()); // Արդյունքի հավաքում նոր ցանկում

System.out.println(filteredNames); // Արտածում՝ [CHARLIE]

Համաժամանակյա 스트րիմներ:

// Օրինակ՝ համաժամանակյա մշակումը 스트րիմում
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

int sum = numbers.parallelStream() // Ստեղծում համաժամանակյա 스트րիմ
                   .mapToInt(Integer::intValue) // Փոխարկում IntStream
                   .sum(); // գումարում

System.out.println(sum); // Արտածում՝ 55 (արագ հաշվարկ կարող է լինել բազմակողմանի համակարգերում)