Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Vad är ett funktionellt gränssnitt? | Grunder och Funktionella Möjligheter med Stream API
Stream API

bookVad är ett funktionellt gränssnitt?

Det är dags att fördjupa sig i hur lambdauttryck skapas i Java och vilken roll funktionella gränssnitt spelar för dem.

Ett funktionellt gränssnitt kan användas för att representera en åtgärd eller operation som kan utföras. Istället för att skapa en hel klass för en enkel uppgift kan du definiera ett gränssnitt med en enda metod som beskriver åtgärden.

Exempel på ett funktionellt gränssnitt:

@FunctionalInterface
public interface MyFunctionalInterface {
    void myMethod();  // The only abstract method
}

Annoteringen @FunctionalInterface är valfri, men den hjälper kompilatorn och utvecklare genom att säkerställa att interfacet förblir funktionellt och förhindrar tillägg av flera abstrakta metoder.

Varför behöver vi dem?

I Stream API används funktionella gränssnitt för att överföra olika beteenden till metoder som arbetar med datamängder.

Till exempel kan du överföra ett filtreringsvillkor till en metod som väljer specifika element från en lista eller ange en operation för att transformera varje element, vilket används i metoder som filter() och 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() tar ett speciellt funktionellt gränssnitt som kallas Predicate<T> (som du kommer att gå igenom senare), vilket kontrollerar om ett element uppfyller ett visst villkor. I detta fall avgör lambda-uttrycket n -> n % 2 == 0 om ett tal är jämnt. Om talet är delbart med 2 utan rest, stannar det kvar i strömmen.

Skapa ett eget funktionellt gränssnitt

Antag att du behöver ett gränssnitt för att utföra aritmetiska operationer som addition eller subtraktion. Du kan skapa ett funktionellt gränssnitt kallat ArithmeticOperation med en metod apply som utför en operation på två tal, a och b.

@FunctionalInterface
public interface ArithmeticOperation {
    int apply(int a, int b);  // Method to perform an operation on two numbers
}

Nu när du har interfacet kan du använda lambdauttryck för att definiera olika operationer såsom addition och 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 } }

Lambda-uttrycken (a, b) -> a + b och (a, b) -> a - b implementerar metoden apply i gränssnittet och utför addition respektive subtraktion. Det första lambda-uttrycket returnerar summan av två tal, medan det andra returnerar deras differens.

Detta tillvägagångssätt ger ett flexibelt sätt att använda olika aritmetiska operationer utan att behöva skapa separata klasser för varje operation.

1. Vad är ett funktionellt gränssnitt i Java?

2. Vilket lambda-uttryck implementerar korrekt följande funktionella gränssnitt?

question mark

Vad är ett funktionellt gränssnitt i Java?

Select the correct answer

question mark

Vilket lambda-uttryck implementerar korrekt följande funktionella gränssnitt?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 1. Kapitel 3

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

Awesome!

Completion rate improved to 2.33

bookVad är ett funktionellt gränssnitt?

Svep för att visa menyn

Det är dags att fördjupa sig i hur lambdauttryck skapas i Java och vilken roll funktionella gränssnitt spelar för dem.

Ett funktionellt gränssnitt kan användas för att representera en åtgärd eller operation som kan utföras. Istället för att skapa en hel klass för en enkel uppgift kan du definiera ett gränssnitt med en enda metod som beskriver åtgärden.

Exempel på ett funktionellt gränssnitt:

@FunctionalInterface
public interface MyFunctionalInterface {
    void myMethod();  // The only abstract method
}

Annoteringen @FunctionalInterface är valfri, men den hjälper kompilatorn och utvecklare genom att säkerställa att interfacet förblir funktionellt och förhindrar tillägg av flera abstrakta metoder.

Varför behöver vi dem?

I Stream API används funktionella gränssnitt för att överföra olika beteenden till metoder som arbetar med datamängder.

Till exempel kan du överföra ett filtreringsvillkor till en metod som väljer specifika element från en lista eller ange en operation för att transformera varje element, vilket används i metoder som filter() och 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() tar ett speciellt funktionellt gränssnitt som kallas Predicate<T> (som du kommer att gå igenom senare), vilket kontrollerar om ett element uppfyller ett visst villkor. I detta fall avgör lambda-uttrycket n -> n % 2 == 0 om ett tal är jämnt. Om talet är delbart med 2 utan rest, stannar det kvar i strömmen.

Skapa ett eget funktionellt gränssnitt

Antag att du behöver ett gränssnitt för att utföra aritmetiska operationer som addition eller subtraktion. Du kan skapa ett funktionellt gränssnitt kallat ArithmeticOperation med en metod apply som utför en operation på två tal, a och b.

@FunctionalInterface
public interface ArithmeticOperation {
    int apply(int a, int b);  // Method to perform an operation on two numbers
}

Nu när du har interfacet kan du använda lambdauttryck för att definiera olika operationer såsom addition och 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 } }

Lambda-uttrycken (a, b) -> a + b och (a, b) -> a - b implementerar metoden apply i gränssnittet och utför addition respektive subtraktion. Det första lambda-uttrycket returnerar summan av två tal, medan det andra returnerar deras differens.

Detta tillvägagångssätt ger ett flexibelt sätt att använda olika aritmetiska operationer utan att behöva skapa separata klasser för varje operation.

1. Vad är ett funktionellt gränssnitt i Java?

2. Vilket lambda-uttryck implementerar korrekt följande funktionella gränssnitt?

question mark

Vad är ett funktionellt gränssnitt i Java?

Select the correct answer

question mark

Vilket lambda-uttryck implementerar korrekt följande funktionella gränssnitt?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 1. Kapitel 3
some-alt