Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

For å kunne utnytte kraften i lambda til det fulle, er de oftest brukte funksjonelle grensesnittene implementert i Java, så man slipper å definere dem selv. Vi skal snakke litt om grensesnittene Predicate og , Consumer og BinaryOperator:

Predicate-grensesnittet har metoden test, som tar inn et objekt av hvilken som helst type (det vil si Object) som argument, og returnerer en boolean.

Consumer-grensesnittet har metoden accept, som tar inn et objekt av hvilken som helst type (det vil si Objectsom argument, og returnerer ingenting (void).

BinaryOparator<T>-grensesnittet har metoden apply, som tar inn to objekt av typen T, og og returnerer ett objekt av samme type. For eksempel addisjon: Tar inn to doubles, returnerer summen (én double).

Bruken av disse skal vi demonstrere senere.

...

Filter er en svært vanlig operasjon på lister (i likhet med map og reduce som vi nevner senere), som mange programmeringsspråk har støtte for. Filter kalles på en liste, og returnerer en ny liste med kun de elementene som tilfredsstiller et gitt predikat (instans av Predicate-grensesnittet nevnt tidligere). Den filtrerer med andre ord ut alle element som ikke matcher predikatet, og returnerer resulterende stream. For eksempel: Hvilke personer er over 18 år?

...

Det finnes spesielle map-funksjoner også, som mapToInt og mapToDouble. Disse returnerer henholdsvis IntegerStream og DoubleStream, som har hendige metoder som average, sum, min og max.

...

Reduce brukes for å redusere en liste til et ett enkelt svarresultat. Reduce tar en akkumulatorfunksjon  BinaryOperator-instans som man kaller akkumulator (akkumulere == samle) som argument. Denne akkumulatoren tar to argument: Verdien så langt, og neste element. Reduce brukes ofte sammen med map. La oss finne totalalderen i lista vår.

...

I tilfellet over er argumentet a den midlertidige summen av aldre, og b er alderen til neste person i lista. Grunnen til at vi kaller .get() på slutten er fordi reduce returnerer en objekt av typen Optional. Det er en container-type som kan inneholde et eksisterende objekt, eller null. Dersom det inneholder et faktisk objekt, vil isPresent() returnere true, og get() vil returnere verdien. Reduce kan også ta i bruk det doble kolonet, dersom den aktuelle metoden er en akkumulatorfunksjon som passer med typen til listeelementene. La oss finne maksimumsalderen:

...