Function en BiFunction
Waarden functioneel transformeren
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::toUpperCasekan 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
Stringen eeninttot eenString.
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
BiFunctionbestaat geencompose, 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 metapply.andThenketent vooruit (g(f(x)));composeketent achteruit (f(g(x))).Function.identity()retourneert de invoer.BiFunction<T,U,R>verwerkt twee invoeren en ondersteuntandThen, maar nietcompose.
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
- Function en BiFunction
- Supplier en Consumer
- Predicate en compositie
- Aangepaste functionele interfaces