Sobes.tech
Junior — Middle

Ինչպես են տարբերվում Stream API-ի տերմինալ և ոչ տերմինալ օպերացիաները իրենց գործառույթների և նպատակների առումով?

sobes.tech AI

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

Stream API- ում տերմինալ և ոչ տերմինալ գործողությունները տարբեր են իրենց նպատակով և վարքով.

  • Ոչ տերմինալ (միջանկյալ) գործողություններ — դա գործողություններ են, որոնք վերադարձնում են նոր հոսք և թույլ են տալիս կառուցել փոխարկումների շղթա: Դրանք քնքուշ են, այսինքն, չեն կատարվում անմիջապես, այլ միայն երբ կանչվում է տերմինալ գործողություն: Օրինակներ՝ filter(), map(), sorted(), distinct():

  • Տերմինալ գործողություններ — ավարտում են գործողությունների շղթան և սկսում տվյալների մշակումը: Վերադարձնում են արդյունք (օրինակ՝ հավաքածու, թիվ, void): Տերմինալ գործողությունից հետո հոսքը համարվում է փակ և չի կարող կրկնակի օգտագործվել: Օրինակներ՝ collect(), forEach(), reduce(), count():

Օրինակ՝

List<String> result = list.stream()
    .filter(s -> s.startsWith("A"))   // ոչ տերմինալ
    .map(String::toUpperCase)           // ոչ տերմինալ
    .collect(Collectors.toList());     // տերմինալ

Այստեղ ֆիլտրում և փոխարկում չեն կատարվում անմիջապես, այլ միայն երբ կանչվում է collect(), որը սկսում է մշակումը և վերադարձնում վերջնական ցանկը։