Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Che cos'è un'interfaccia funzionale? | Fondamenti e Capacità Funzionali dello Stream API
Stream API

bookChe cos'è un'interfaccia funzionale?

È il momento di approfondire come vengono create le lambda in Java e quale ruolo hanno le interfacce funzionali in questo processo.

Una interfaccia funzionale può essere utilizzata per rappresentare un'azione o un'operazione eseguibile. Invece di creare un'intera classe per un compito semplice, è possibile definire un'interfaccia con un solo metodo che descrive l'azione.

Esempio di interfaccia funzionale:

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

L'annotazione @FunctionalInterface è opzionale, ma aiuta il compilatore e gli sviluppatori a garantire che l'interfaccia rimanga funzionale e impedisce l'aggiunta di più metodi astratti.

Perché sono necessarie?

Nella Stream API, le interfacce funzionali vengono utilizzate per passare diversi comportamenti ai metodi che lavorano con collezioni di dati.

Ad esempio, è possibile passare una condizione di filtro a un metodo che seleziona elementi specifici da una lista oppure fornire un'operazione per trasformare ciascun elemento, come avviene nei metodi filter() e 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); } }

Il metodo filter() accetta una speciale interfaccia funzionale chiamata Predicate<T> (che verrà approfondita successivamente), la quale verifica se un elemento soddisfa una determinata condizione. In questo caso, l'espressione lambda n -> n % 2 == 0 determina se un numero è pari. Se il numero è divisibile per 2 senza resto, rimane nello stream.

Creazione di un'interfaccia funzionale personalizzata

Supponiamo sia necessaria un'interfaccia per eseguire operazioni aritmetiche come addizione o sottrazione. È possibile creare un'interfaccia funzionale denominata ArithmeticOperation con un metodo apply che esegue un'operazione su due numeri, a e b.

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

Ora che hai l'interfaccia, puoi utilizzare le espressioni lambda per definire diverse operazioni come addizione e sottrazione:

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 } }

Le espressioni lambda (a, b) -> a + b e (a, b) -> a - b implementano il metodo apply dell'interfaccia, eseguendo rispettivamente addizione e sottrazione. La prima espressione lambda restituisce la somma di due numeri, mentre la seconda restituisce la loro differenza.

Questo approccio offre un modo flessibile per utilizzare diverse operazioni aritmetiche senza la necessità di creare classi separate per ciascuna.

1. Che cos'è un'interfaccia funzionale in Java?

2. Quale espressione lambda implementa correttamente la seguente interfaccia funzionale?

question mark

Che cos'è un'interfaccia funzionale in Java?

Select the correct answer

question mark

Quale espressione lambda implementa correttamente la seguente interfaccia funzionale?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 1. Capitolo 3

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

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

bookChe cos'è un'interfaccia funzionale?

Scorri per mostrare il menu

È il momento di approfondire come vengono create le lambda in Java e quale ruolo hanno le interfacce funzionali in questo processo.

Una interfaccia funzionale può essere utilizzata per rappresentare un'azione o un'operazione eseguibile. Invece di creare un'intera classe per un compito semplice, è possibile definire un'interfaccia con un solo metodo che descrive l'azione.

Esempio di interfaccia funzionale:

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

L'annotazione @FunctionalInterface è opzionale, ma aiuta il compilatore e gli sviluppatori a garantire che l'interfaccia rimanga funzionale e impedisce l'aggiunta di più metodi astratti.

Perché sono necessarie?

Nella Stream API, le interfacce funzionali vengono utilizzate per passare diversi comportamenti ai metodi che lavorano con collezioni di dati.

Ad esempio, è possibile passare una condizione di filtro a un metodo che seleziona elementi specifici da una lista oppure fornire un'operazione per trasformare ciascun elemento, come avviene nei metodi filter() e 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); } }

Il metodo filter() accetta una speciale interfaccia funzionale chiamata Predicate<T> (che verrà approfondita successivamente), la quale verifica se un elemento soddisfa una determinata condizione. In questo caso, l'espressione lambda n -> n % 2 == 0 determina se un numero è pari. Se il numero è divisibile per 2 senza resto, rimane nello stream.

Creazione di un'interfaccia funzionale personalizzata

Supponiamo sia necessaria un'interfaccia per eseguire operazioni aritmetiche come addizione o sottrazione. È possibile creare un'interfaccia funzionale denominata ArithmeticOperation con un metodo apply che esegue un'operazione su due numeri, a e b.

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

Ora che hai l'interfaccia, puoi utilizzare le espressioni lambda per definire diverse operazioni come addizione e sottrazione:

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 } }

Le espressioni lambda (a, b) -> a + b e (a, b) -> a - b implementano il metodo apply dell'interfaccia, eseguendo rispettivamente addizione e sottrazione. La prima espressione lambda restituisce la somma di due numeri, mentre la seconda restituisce la loro differenza.

Questo approccio offre un modo flessibile per utilizzare diverse operazioni aritmetiche senza la necessità di creare classi separate per ciascuna.

1. Che cos'è un'interfaccia funzionale in Java?

2. Quale espressione lambda implementa correttamente la seguente interfaccia funzionale?

question mark

Che cos'è un'interfaccia funzionale in Java?

Select the correct answer

question mark

Quale espressione lambda implementa correttamente la seguente interfaccia funzionale?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 1. Capitolo 3
some-alt