Wat Is een Functionele Interface?
Het is tijd om dieper in te gaan op hoe lambdas worden gemaakt in Java en wat functionele interfaces hiermee te maken hebben.
Een functionele interface kan worden gebruikt om een actie of bewerking te vertegenwoordigen die kan worden uitgevoerd. In plaats van een volledige klasse te maken voor een eenvoudige taak, kun je een interface definiëren met een enkele methode die de actie beschrijft.
Voorbeeld van een functionele interface:
@FunctionalInterface
public interface MyFunctionalInterface {
void myMethod(); // The only abstract method
}
De annotatie @FunctionalInterface is optioneel, maar ondersteunt de compiler en ontwikkelaars door te waarborgen dat de interface functioneel blijft en het toevoegen van meerdere abstracte methoden voorkomt.
Waarom Hebben We Ze Nodig?
Binnen de Stream API worden functionele interfaces gebruikt om verschillende gedragingen door te geven aan methoden die werken met gegevensverzamelingen.
Bijvoorbeeld, het is mogelijk om een filtervoorwaarde door te geven aan een methode die specifieke elementen uit een lijst selecteert, of een bewerking te leveren om elk element te transformeren, zoals toegepast in methoden als filter() en map().
Main.java
1234567891011121314151617package com.example; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6); // Using `filter()` to extract even numbers List<Integer> evenNumbers = numbers.stream() .filter(n -> n % 2 == 0) // Predicate: keeps only even numbers .collect(Collectors.toList()); System.out.println(evenNumbers); } }
De filter()-methode accepteert een speciale functionele interface genaamd Predicate<T> (die later wordt behandeld), die controleert of een element aan een bepaalde voorwaarde voldoet. In dit geval bepaalt de lambda-expressie n -> n % 2 == 0 of een getal even is. Als het getal deelbaar door 2 is zonder rest, blijft het in de stream.
Een eigen functionele interface maken
Stel dat er een interface nodig is om rekenkundige bewerkingen zoals optellen of aftrekken uit te voeren.
Er kan een functionele interface worden gemaakt genaamd ArithmeticOperation met een methode apply die een bewerking uitvoert op twee getallen, a en b.
@FunctionalInterface
public interface ArithmeticOperation {
int apply(int a, int b); // Method to perform an operation on two numbers
}
Nu de interface beschikbaar is, kunnen lambda-expressies worden gebruikt om verschillende bewerkingen zoals optellen en aftrekken te definiëren:
Main.java
1234567891011public class Main { public static void main(String[] args) { // Addition ArithmeticOperation add = (a, b) -> a + b; System.out.println("Sum: " + add.apply(5, 3)); // 8 // Subtraction ArithmeticOperation subtract = (a, b) -> a - b; System.out.println("Difference: " + subtract.apply(5, 3)); // 2 } }
De lambda-expressies (a, b) -> a + b en (a, b) -> a - b implementeren de methode apply van de interface, waarmee respectievelijk optelling en aftrekking worden uitgevoerd. De eerste lambda-expressie retourneert de som van twee getallen, terwijl de tweede hun verschil retourneert.
Deze benadering biedt een flexibele manier om verschillende rekenkundige bewerkingen te gebruiken zonder voor elke bewerking aparte klassen te hoeven maken.
1. Wat is een functionele interface in Java?
2. Welke lambda-expressie implementeert de volgende functionele interface correct?
Bedankt voor je feedback!
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.
What are some examples of built-in functional interfaces in Java?
How do I use a lambda expression with a custom functional interface?
Can you explain how functional interfaces are used with the Stream API?
Awesome!
Completion rate improved to 2.33
Wat Is een Functionele Interface?
Veeg om het menu te tonen
Het is tijd om dieper in te gaan op hoe lambdas worden gemaakt in Java en wat functionele interfaces hiermee te maken hebben.
Een functionele interface kan worden gebruikt om een actie of bewerking te vertegenwoordigen die kan worden uitgevoerd. In plaats van een volledige klasse te maken voor een eenvoudige taak, kun je een interface definiëren met een enkele methode die de actie beschrijft.
Voorbeeld van een functionele interface:
@FunctionalInterface
public interface MyFunctionalInterface {
void myMethod(); // The only abstract method
}
De annotatie @FunctionalInterface is optioneel, maar ondersteunt de compiler en ontwikkelaars door te waarborgen dat de interface functioneel blijft en het toevoegen van meerdere abstracte methoden voorkomt.
Waarom Hebben We Ze Nodig?
Binnen de Stream API worden functionele interfaces gebruikt om verschillende gedragingen door te geven aan methoden die werken met gegevensverzamelingen.
Bijvoorbeeld, het is mogelijk om een filtervoorwaarde door te geven aan een methode die specifieke elementen uit een lijst selecteert, of een bewerking te leveren om elk element te transformeren, zoals toegepast in methoden als filter() en map().
Main.java
1234567891011121314151617package com.example; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6); // Using `filter()` to extract even numbers List<Integer> evenNumbers = numbers.stream() .filter(n -> n % 2 == 0) // Predicate: keeps only even numbers .collect(Collectors.toList()); System.out.println(evenNumbers); } }
De filter()-methode accepteert een speciale functionele interface genaamd Predicate<T> (die later wordt behandeld), die controleert of een element aan een bepaalde voorwaarde voldoet. In dit geval bepaalt de lambda-expressie n -> n % 2 == 0 of een getal even is. Als het getal deelbaar door 2 is zonder rest, blijft het in de stream.
Een eigen functionele interface maken
Stel dat er een interface nodig is om rekenkundige bewerkingen zoals optellen of aftrekken uit te voeren.
Er kan een functionele interface worden gemaakt genaamd ArithmeticOperation met een methode apply die een bewerking uitvoert op twee getallen, a en b.
@FunctionalInterface
public interface ArithmeticOperation {
int apply(int a, int b); // Method to perform an operation on two numbers
}
Nu de interface beschikbaar is, kunnen lambda-expressies worden gebruikt om verschillende bewerkingen zoals optellen en aftrekken te definiëren:
Main.java
1234567891011public class Main { public static void main(String[] args) { // Addition ArithmeticOperation add = (a, b) -> a + b; System.out.println("Sum: " + add.apply(5, 3)); // 8 // Subtraction ArithmeticOperation subtract = (a, b) -> a - b; System.out.println("Difference: " + subtract.apply(5, 3)); // 2 } }
De lambda-expressies (a, b) -> a + b en (a, b) -> a - b implementeren de methode apply van de interface, waarmee respectievelijk optelling en aftrekking worden uitgevoerd. De eerste lambda-expressie retourneert de som van twee getallen, terwijl de tweede hun verschil retourneert.
Deze benadering biedt een flexibele manier om verschillende rekenkundige bewerkingen te gebruiken zonder voor elke bewerking aparte klassen te hoeven maken.
1. Wat is een functionele interface in Java?
2. Welke lambda-expressie implementeert de volgende functionele interface correct?
Bedankt voor je feedback!