Java 8 Functionele Interfaces: Uitgebreide gids
Functionele interfaces hebben een enkele functionaliteit. Bijvoorbeeld, Comparable met de ene methode compareTo voor vergelijking. Java 8 definieert veel functionele interfaces in het pakket java.util.function voor uitgebreid gebruik in lambda-expressies. Hieronder de lijst:
| Nr. | Interface & Beschrijving |
|---|---|
| 1 | BiConsumer<T,U> Representeert een operatie die twee invoerargumenten accepteert en geen resultaat retourneert. |
| 2 | BiFunction<T,U,R> Representeert een functie die twee argumenten accepteert en een resultaat produceert. |
| 3 | BinaryOperator<T> Operatie op twee operanden van hetzelfde type, produceert resultaat van hetzelfde type. |
| 4 | BiPredicate<T,U> Predicate (Boolean-gewardeerde functie) van twee argumenten. |
| 5 | BooleanSupplier Leverancier van Boolean-resultaten. |
| 6 | Consumer<T> Operatie die één invoerargument accepteert, geen resultaat. |
| 7 | DoubleBinaryOperator Operatie op twee double-operanden, produceert double-resultaat. |
| 8 | DoubleConsumer Operatie die één double-argument accepteert, geen resultaat. |
| 9 | DoubleFunction<R> Functie die een double-argument accepteert en een resultaat produceert. |
| 10 | DoublePredicate Predicate van één double-argument. |
| 11 | DoubleSupplier Leverancier van double-resultaten. |
| 12 | DoubleToIntFunction Functie die double accepteert, int produceert. |
| 13 | DoubleToLongFunction Functie die double accepteert, long produceert. |
| 14 | DoubleUnaryOperator Operatie op één double-operand, produceert double-resultaat. |
| 15 | Function<T,R> Functie die één argument accepteert en een resultaat produceert. |
| 16 | IntBinaryOperator Operatie op twee int-operanden, produceert int-resultaat. |
| 17 | IntConsumer Operatie die één int-argument accepteert, geen resultaat. |
| 18 | IntFunction<R> Functie die een int-argument accepteert en een resultaat produceert. |
| 19 | IntPredicate Predicate van één int-argument. |
| 20 | IntSupplier Leverancier van int-resultaten. |
| 21 | IntToDoubleFunction Functie die int accepteert, double produceert. |
| 22 | IntToLongFunction Functie die int accepteert, long produceert. |
| 23 | IntUnaryOperator Operatie op één int-operand, produceert int-resultaat. |
| 24 | LongBinaryOperator Operatie op twee long-operanden, produceert long-resultaat. |
| 25 | LongConsumer Operatie die één long-argument accepteert, geen resultaat. |
| 26 | LongFunction<R> Functie die een long-argument accepteert en een resultaat produceert. |
| 27 | LongPredicate Predicate van één long-argument. |
| 28 | LongSupplier Leverancier van long-resultaten. |
| 29 | LongToDoubleFunction Functie die long accepteert, double produceert. |
| 30 | LongToIntFunction Functie die long accepteert, int produceert. |
| 31 | LongUnaryOperator Operatie op één long-operand, produceert long-resultaat. |
| 32 | ObjDoubleConsumer<T> Operatie die een object- en een double-argument accepteert, geen resultaat. |
| 33 | ObjIntConsumer<T> Operatie die een object- en een int-argument accepteert, geen resultaat. |
| 34 | ObjLongConsumer<T> Operatie die een object- en een long-argument accepteert, geen resultaat. |
| 35 | Predicate<T> Predicate (Boolean-functie) van één argument. |
| 36 | Supplier<T> Leverancier van resultaten. |
| 37 | ToDoubleBiFunction<T,U> Functie die twee argumenten accepteert, double produceert. |
| 38 | ToDoubleFunction<T> Functie die een double-resultaat produceert. |
| 39 | ToIntBiFunction<T,U> Functie die twee argumenten accepteert, int produceert. |
| 40 | ToIntFunction<T> Functie die een int-resultaat produceert. |
| 41 | ToLongBiFunction<T,U> Functie die twee argumenten accepteert, long produceert. |
| 42 | ToLongFunction<T> Functie die een long-resultaat produceert. |
| 43 | UnaryOperator<T> Operatie op één operand, produceert resultaat van hetzelfde type. |
Functionele Interface Voorbeeld
Predicate<T> is een functionele interface met methode test(Object) die een Boolean retourneert. Dit betekent dat een object getest wordt op true/false.
Maak het volgende programma in C:\JAVA:
Java8Tester.java
import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;
public class Java8Tester {
public static void main(String args[]) {
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
// Predicate<Integer> predicate = n -> true
// test methode retourneert altijd true
System.out.println("Print all numbers:");
eval(list, n -> true);
// Predicate voor even getallen
System.out.println("Print even numbers:");
eval(list, n -> n % 2 == 0);
// Predicate voor getallen > 3
System.out.println("Print numbers greater than 3:");
eval(list, n -> n > 3);
}
public static void eval(List<Integer> list, Predicate<Integer> predicate) {
for (Integer n : list) {
if (predicate.test(n)) {
System.out.println(n + " ");
}
}
}
}
We geven een Predicate-interface door, die één invoer accepteert en Boolean retourneert.
Resultaat verifiëren
Compileer met javac:
C:\JAVA> javac Java8Tester.java
Voer uit:
C:\JAVA> java Java8Tester
Uitvoer:
Print all numbers: 1 2 3 4 5 6 7 8 9 Print even numbers: 2 4 6 8 Print numbers greater than 3: 4 5 6 7 8 9
Java
- Java-operators beheersen: typen, syntax en praktische voorbeelden
- Java-commentaar: typen, gebruik en best practices
- Java Enhanced For-lus beheersen: syntax, voorbeelden en best practices
- Java Strings beheersen: aanmaken, methodes en best practices
- Java interfaces meesteren: concepten, implementatie en best practices
- Java anonieme inner classes meesteren: definitie, syntax en praktische voorbeelden
- Java Try-with-resources meesteren: automatische resource management uitgelegd
- Java Annotaties uitgelegd: typen, plaatsing en praktische voorbeelden
- Java Assertions: een praktische gids voor bugdetectie en codebetrouwbaarheid
- Java Vector begrijpen: Gebruik, Kenmerken en Vergelijking met ArrayList
- Java Interfaces begrijpen: Definities, Gebruik en Best Practices