java-programiranje

Implementacija brojnih funkcionalnosti u softveru često se svodi na standardne operacije nad skupovima podataka ili objektima. Ove operacije uključuju prolazak kroz podatke, filtriranje (pretragu), mapiranje (pretvaranje iz jednog oblika u drugi), redukciju (izračunavanje po određenom pravilu), sortiranje, traženje proseka, minimuma, maksimuma i slično. Algoritmi koji obavljaju ove operacije već su dobro poznati, i poželjno je izbegavati ponovno pisanje istih.

Java i C# pružaju API za izražavanje ovih standardnih operacija nad kolekcijama, koristeći funkcije višeg reda. To znači da ove funkcije mogu prihvatati druge funkcije kao parametre ili ih vraćati kao rezultate. Svaka od tih funkcija implementira jednu od prethodno pomenutih standardnih operacija. Parametri ovih funkcija, često izraženi kao lambda izrazi, omogućavaju prilagođavanje operacija domenskim specifičnostima vezanim za podatke. Ove funkcije mogu se lančano pozivati u jednoj naredbi, često u samo jednom redu koda. Ovaj pristup se naziva funkcionalno programiranje.

Složene operacije nad kolekcijama podataka mogu se brzo i efikasno implementirati na funkcionalan način, čime se postiže bolja čitljivost i manja podložnost greškama. Iako funkcionalni pristup može malo povećati vreme izvršavanja nad manjim skupovima podataka, omogućava lakše i brže paralelizovanje operacija.

U Javi, funkcionalne operacije nad kolekcijama su definisane putem klasa iz paketa java.util.Stream. Kolekciju je potrebno pretvoriti u Stream pre obrade, a rezultat se može pretvoriti u željeni oblik nakon završetka operacija. U C#, funkcionalne operacije su definisane interfejsom IEnumerable<T> iz namespace-a System.Linq i podržane su od strane svih kolekcija koje ga implementiraju.

Na ovom linku možete videti uporediti neke primere implementacija upotrebom oba API-a: https://www.ankursheel.com/blog/transitioning-c-linq-java-streams