Java Academy · Les

Function en BiFunction

Waarden functioneel transformeren

Les 1 van 413 stappen

Function en BiFunction is een gratis Java Academy-les op CoddyKit. Dit is les 1 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Java Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Java Academy bevat in totaal 4 lessen.

Waar Function voor staat

Function<T, R> is de kerninterface voor transformaties in java.util.function. Deze neemt één argument van type T aan en retourneert een resultaat van type R.

  • De enige abstracte methode is R apply(T t).
  • De interface beschrijft een zuivere omzetting van invoer naar uitvoer.
import java.util.function.Function;

public class Main {
    public static void main(String[] args) {
        Function<String, Integer> length = s -> s.length();
        System.out.println(length.apply("hello"));
    }
}

apply aanroepen

Je roept een Function aan door apply aan te roepen. De body van de lambda bevat de omzettingslogica.

  • Invoer- en uitvoertypen kunnen verschillen.
  • Een methodeverwijzing zoals String::toUpperCase kan een lambda vervangen.
import java.util.function.Function;

public class Main {
    public static void main(String[] args) {
        Function<String, String> upper = String::toUpperCase;
        System.out.println(upper.apply("java"));
    }
}

Samenstelling met andThen

andThen ketent functies: het resultaat van de eerste functie wordt de invoer van de tweede.

  • f.andThen(g) betekent g(f(x)).
  • Je leest het van links naar rechts.
import java.util.function.Function;

public class Main {
    public static void main(String[] args) {
        Function<Integer, Integer> times2 = n -> n * 2;
        Function<Integer, Integer> plus3 = n -> n + 3;
        System.out.println(times2.andThen(plus3).apply(5));
    }
}

Samenstelling met compose

compose voert de argumentfunctie eerst uit.

  • f.compose(g) betekent f(g(x)).
  • Het is het spiegelbeeld van andThen.
import java.util.function.Function;

public class Main {
    public static void main(String[] args) {
        Function<Integer, Integer> times2 = n -> n * 2;
        Function<Integer, Integer> plus3 = n -> n + 3;
        System.out.println(times2.compose(plus3).apply(5));
    }
}

Function.identity

Function.identity() retourneert een functie die de invoer ongewijzigd teruggeeft.

  • Handig in stream-collectors en standaardtoewijzingen.
  • Gelijkwaardig aan x -> x.
import java.util.function.Function;

public class Main {
    public static void main(String[] args) {
        Function<String, String> id = Function.identity();
        System.out.println(id.apply("unchanged"));
    }
}

Maak kennis met BiFunction

BiFunction<T, U, R> neemt twee argumenten aan en retourneert één resultaat.

  • De methode is R apply(T t, U u).
  • Handig om twee waarden te combineren, bijvoorbeeld bij het samenvoegen van maps.
import java.util.function.BiFunction;

public class Main {
    public static void main(String[] args) {
        BiFunction<Integer, Integer, Integer> add = (a, b) -> a + b;
        System.out.println(add.apply(4, 6));
    }
}

BiFunction met verschillende typen

De drie typeparameters van BiFunction kunnen allemaal verschillen.

  • Hier combineren we een String en een int tot een String.
import java.util.function.BiFunction;

public class Main {
    public static void main(String[] args) {
        BiFunction<String, Integer, String> repeat = (s, n) -> s.repeat(n);
        System.out.println(repeat.apply("ab", 3));
    }
}

BiFunction enThen

BiFunction ondersteunt ook andThen. Daarbij wordt een eenwaardige Function gebruikt om het resultaat na te bewerken.

  • Op BiFunction bestaat geen compose, omdat daarvoor twee invoeren nodig zouden zijn.
import java.util.function.BiFunction;
import java.util.function.Function;

public class Main {
    public static void main(String[] args) {
        BiFunction<Integer, Integer, Integer> add = (a, b) -> a + b;
        Function<Integer, String> label = n -> "sum=" + n;
        System.out.println(add.andThen(label).apply(7, 8));
    }
}

Functies in verzamelingen

Veel API's accepteren een Function. Zo gebruikt Map.computeIfAbsent een toewijzingsfunctie voor ontbrekende sleutels.

import java.util.HashMap;
import java.util.Map;

public class Main {
    public static void main(String[] args) {
        Map<String, Integer> lengths = new HashMap<>();
        lengths.computeIfAbsent("hello", String::length);
        System.out.println(lengths);
    }
}

Functies in variabelen opslaan

Omdat functies objecten zijn, kun je ze opslaan, doorgeven en retourneren. Dit vormt de basis van Java in functionele stijl.

import java.util.function.Function;

public class Main {
    public static void main(String[] args) {
        Function<Integer, Integer> square = n -> n * n;
        Function<Integer, Integer> cube = n -> n * n * n;
        Function<Integer, Integer> chosen = square;
        System.out.println(chosen.apply(5));
    }
}

Een verwerkingsketen bouwen

Door andThen herhaaldelijk te koppelen, bouw je een leesbare en herbruikbare verwerkingsketen voor transformaties.

import java.util.function.Function;

public class Main {
    public static void main(String[] args) {
        Function<String, String> trim = String::trim;
        Function<String, String> upper = String::toUpperCase;
        Function<String, Integer> len = String::length;
        System.out.println(trim.andThen(upper).andThen(len).apply("  abc "));
    }
}

Korte controle

Wat berekent f.andThen(g).apply(x)?

Samenvatting

Je hebt de kerninterfaces voor transformaties geleerd:

  • Function<T,R> zet één waarde om met apply.
  • andThen ketent vooruit (g(f(x))); compose ketent achteruit (f(g(x))).
  • Function.identity() retourneert de invoer.
  • BiFunction<T,U,R> verwerkt twee invoeren en ondersteunt andThen, maar niet compose.
Gratis beginnen

Leer Java met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
104
Lessen
374

Veelgestelde vragen

Is de les “Function en BiFunction” gratis?

Ja — de volledige tekst van “Function en BiFunction” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Java Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Java Academy bevat in totaal 4 lessen.

Wat leer ik in “Function en BiFunction”?

Waarden functioneel transformeren Je oefent met Java Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Java Academy te beginnen?

Ervaring vooraf is niet nodig. Java Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 1 van 4.

Hoe lang duurt de les “Function en BiFunction”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Java Academy?

Ja. Elke les over Java Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Function en BiFunction
  2. Supplier en Consumer
  3. Predicate en compositie
  4. Aangepaste functionele interfaces
← Terug naar Java Academy