Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Hvad Er Et Funktionelt Interface? | Grundlæggende og Funktionelle Kapaciteter af Stream API
Stream API

bookHvad 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

Main.java

copy
1234567891011121314151617
package 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

Main.java

copy
1234567891011
public 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?

question mark

Hvad er et funktionelt interface i Java?

Select the correct answer

question mark

Hvilket lambdaudtryk implementerer korrekt følgende funktionelle interface?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 1. Kapitel 3

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

Suggested prompts:

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

bookHvad 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

Main.java

copy
1234567891011121314151617
package 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

Main.java

copy
1234567891011
public 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?

question mark

Hvad er et funktionelt interface i Java?

Select the correct answer

question mark

Hvilket lambdaudtryk implementerer korrekt følgende funktionelle interface?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 1. Kapitel 3
some-alt