Hvad Er Et Funktionelt Interface?
Det er tid til at dykke dybere ned i, hvordan lambdas oprettes i Java, og hvilken rolle funktionelle interfaces spiller i denne sammenhæng.
Et funktionelt interface kan bruges til at repræsentere en handling eller operation, der kan udføres. I stedet for at oprette en hel klasse til en simpel opgave, kan du definere et interface med en enkelt metode, der beskriver handlingen.
Eksempel på et funktionelt interface:
@FunctionalInterface
public interface MyFunctionalInterface {
void myMethod(); // The only abstract method
}
Annotationen @FunctionalInterface er valgfri, men den hjælper kompilatoren og udviklere ved at sikre, at interfacet forbliver funktionelt og forhindrer tilføjelse af flere abstrakte metoder.
Hvorfor har vi brug for dem?
I Stream API bruges funktionelle interfaces til at videregive forskellige adfærdsmønstre til metoder, der arbejder med datasamlinger.
For eksempel kan du videregive en filtreringsbetingelse til en metode, der udvælger specifikke elementer fra en liste, eller angive en operation til at transformere hvert element, som det ses i metoder som filter() og 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); } }
Metoden filter() modtager et særligt funktionelt interface kaldet Predicate<T> (som du vil lære mere om senere), der kontrollerer, om et element opfylder en bestemt betingelse. I dette tilfælde afgør lambda-udtrykket n -> n % 2 == 0, om et tal er lige. Hvis tallet er deleligt med 2 uden rest, forbliver det i strømmen.
Oprettelse af et brugerdefineret funktionelt interface
Antag, at du har brug for et interface til at udføre aritmetiske operationer som addition eller subtraktion.
Du kan oprette et funktionelt interface kaldet ArithmeticOperation med en metode apply, der udfører en operation på to tal, a og b.
@FunctionalInterface
public interface ArithmeticOperation {
int apply(int a, int b); // Method to perform an operation on two numbers
}
Nu hvor du har interfacet, kan du bruge lambdaudtryk til at definere forskellige operationer såsom addition og subtraktion:
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 } }
Lambdaudtryk (a, b) -> a + b og (a, b) -> a - b implementerer metoden apply fra interfacet og udfører henholdsvis addition og subtraktion. Det første lambdaudtryk returnerer summen af to tal, mens det andet returnerer deres differens.
Denne tilgang giver en fleksibel metode til at anvende forskellige aritmetiske operationer uden behov for at oprette separate klasser for hver operation.
1. Hvad er et funktionelt interface i Java?
2. Hvilket lambdaudtryk implementerer korrekt følgende funktionelle interface?
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
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
Hvad Er Et Funktionelt Interface?
Stryg for at vise menuen
Det er tid til at dykke dybere ned i, hvordan lambdas oprettes i Java, og hvilken rolle funktionelle interfaces spiller i denne sammenhæng.
Et funktionelt interface kan bruges til at repræsentere en handling eller operation, der kan udføres. I stedet for at oprette en hel klasse til en simpel opgave, kan du definere et interface med en enkelt metode, der beskriver handlingen.
Eksempel på et funktionelt interface:
@FunctionalInterface
public interface MyFunctionalInterface {
void myMethod(); // The only abstract method
}
Annotationen @FunctionalInterface er valgfri, men den hjælper kompilatoren og udviklere ved at sikre, at interfacet forbliver funktionelt og forhindrer tilføjelse af flere abstrakte metoder.
Hvorfor har vi brug for dem?
I Stream API bruges funktionelle interfaces til at videregive forskellige adfærdsmønstre til metoder, der arbejder med datasamlinger.
For eksempel kan du videregive en filtreringsbetingelse til en metode, der udvælger specifikke elementer fra en liste, eller angive en operation til at transformere hvert element, som det ses i metoder som filter() og 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); } }
Metoden filter() modtager et særligt funktionelt interface kaldet Predicate<T> (som du vil lære mere om senere), der kontrollerer, om et element opfylder en bestemt betingelse. I dette tilfælde afgør lambda-udtrykket n -> n % 2 == 0, om et tal er lige. Hvis tallet er deleligt med 2 uden rest, forbliver det i strømmen.
Oprettelse af et brugerdefineret funktionelt interface
Antag, at du har brug for et interface til at udføre aritmetiske operationer som addition eller subtraktion.
Du kan oprette et funktionelt interface kaldet ArithmeticOperation med en metode apply, der udfører en operation på to tal, a og b.
@FunctionalInterface
public interface ArithmeticOperation {
int apply(int a, int b); // Method to perform an operation on two numbers
}
Nu hvor du har interfacet, kan du bruge lambdaudtryk til at definere forskellige operationer såsom addition og subtraktion:
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 } }
Lambdaudtryk (a, b) -> a + b og (a, b) -> a - b implementerer metoden apply fra interfacet og udfører henholdsvis addition og subtraktion. Det første lambdaudtryk returnerer summen af to tal, mens det andet returnerer deres differens.
Denne tilgang giver en fleksibel metode til at anvende forskellige aritmetiske operationer uden behov for at oprette separate klasser for hver operation.
1. Hvad er et funktionelt interface i Java?
2. Hvilket lambdaudtryk implementerer korrekt følgende funktionelle interface?
Tak for dine kommentarer!