Sobes.tech
Middle

რატომ გამოიყენება სტრიმები ახალი ვერსიის Java-ში?

sobes.tech AI

პასუხი AI-სგან

Java-ның жаңа нұсқаларында (Java 8-ден бастап) стримдердің қолданылуы тиімділік, кодтың оқылуы және деректерді параллель өңдеу себептерімен байланысты бірнеше себептерге негізделген:

  • Функционалды бағдарламалау: 스트림дер кодты дәлірек декларативті стильде жазуға мүмкіндік береді, мұнда не істеу керек екеніне назар аударылады, қалай емес. Бұл оқылуын және қолдауды жақсартады.
  • Параллель өңдеу: 스트имдер коллекциялармен өңдеу операцияларын оңай параллелдеу үшін parallelStream() пайдаланады. JVM деректерді бөлу және нәтижелерді біріктіруді басқарады, бұл көпжіпті бағдарламаларды дамытуға жеңілдетеді.
  • Тиімділік: Lazy evaluation (сабырлы бағалау) 스트имдерде операциялар тек қажет болғанда орындалады, бұл қосымша шығындарды азайтады. Intermediate-операциялар (map, filter) терминал-операцияны (collect, forEach) шақырмай тұрып орындалмайды.
  • Коллекцияларды өңдеуді жақсарту: Стримдер стандартты, жоғары деңгейлі операциялар жиынтығын ұсынады, олар фильтрлеу, картаға салу, деректерді жинақтау үшін пайдаланылады, бұл циклдармен жазылған шаблонды код санын азайтады.
  • Immutable Operations: Стримдер бастапқы коллекцияны өзгертпейді, олар құрылған коллекцияны қолдайды, иммутабельдік принциптерін сақтайды және қателерді табуды жеңілдетеді.
// Стримдерді фильтрлеу және картаға салу мысалы
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 (көпжолды жүйелерде тез есептелуі мүмкін)