Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Mikä on funktionaalinen rajapinta? | Stream API:n Perusteet ja Toiminnalliset Ominaisuudet
Stream API

bookMikä on funktionaalinen rajapinta?

On aika perehtyä tarkemmin siihen, miten lambda-lausekkeet luodaan Javassa ja mikä rooli funktionaalisilla rajapinnoilla on niiden yhteydessä.

Funktionaalista rajapintaa voidaan käyttää kuvaamaan toimintoa tai operaatiota, joka voidaan suorittaa. Kokonaisen luokan luomisen sijaan yksinkertaista tehtävää varten voidaan määritellä rajapinta, jossa on yksi metodi, joka kuvaa toiminnon.

Esimerkki funktionaalisesta rajapinnasta:

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

@FunctionalInterface-annotaatio on valinnainen, mutta se auttaa kääntäjää ja kehittäjiä varmistamaan, että rajapinta pysyy funktionaalisena ja estää useiden abstraktien metodien lisäämisen.

Miksi niitä tarvitaan?

Stream API:ssa funktionaalisia rajapintoja käytetään välittämään erilaisia toimintoja metodeihin, jotka käsittelevät datan kokoelmia.

Esimerkiksi voit välittää suodatusehdon metodille, joka valitsee tiettyjä alkioita listasta, tai antaa operaation, joka muuntaa jokaisen alkion, kuten filter()- ja map()-metodeissa.

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

filter()-metodi käyttää erityistä funktionaalista rajapintaa nimeltä Predicate<T> (johon perehdyt myöhemmin), joka tarkistaa, täyttääkö alkio tietyn ehdon. Tässä tapauksessa lambda-lauseke n -> n % 2 == 0 määrittää, onko luku parillinen. Jos luku on jaollinen kahdella ilman jakojäännöstä, se säilyy virrassa.

Oman funktionaalisen rajapinnan luominen

Tarvittaessa rajapinta aritmeettisten operaatioiden, kuten yhteenlaskun tai vähennyslaskun, suorittamiseen. Voit luoda funktionaalisen rajapinnan nimeltä ArithmeticOperation, jossa on metodi apply, joka suorittaa operaation kahdelle luvulle, a ja b.

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

Nyt kun sinulla on rajapinta, voit käyttää lambda-lausekkeita määritelläksesi erilaisia operaatioita kuten yhteenlasku ja vähennyslasku:

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-lausekkeet (a, b) -> a + b ja (a, b) -> a - b toteuttavat rajapinnan apply-metodin, suorittaen vastaavasti yhteenlaskun ja vähennyksen. Ensimmäinen lambda-lauseke palauttaa kahden luvun summan, kun taas toinen palauttaa niiden erotuksen.

Tämä lähestymistapa tarjoaa joustavan tavan käyttää erilaisia aritmeettisia operaatioita ilman, että jokaiselle tarvitsee luoda erillistä luokkaa.

1. Mikä on funktionaalinen rajapinta Javassa?

2. Mikä lambda-lauseke toteuttaa oikein seuraavan funktionaalisen rajapinnan?

question mark

Mikä on funktionaalinen rajapinta Javassa?

Select the correct answer

question mark

Mikä lambda-lauseke toteuttaa oikein seuraavan funktionaalisen rajapinnan?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 1. Luku 3

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

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

bookMikä on funktionaalinen rajapinta?

Pyyhkäise näyttääksesi valikon

On aika perehtyä tarkemmin siihen, miten lambda-lausekkeet luodaan Javassa ja mikä rooli funktionaalisilla rajapinnoilla on niiden yhteydessä.

Funktionaalista rajapintaa voidaan käyttää kuvaamaan toimintoa tai operaatiota, joka voidaan suorittaa. Kokonaisen luokan luomisen sijaan yksinkertaista tehtävää varten voidaan määritellä rajapinta, jossa on yksi metodi, joka kuvaa toiminnon.

Esimerkki funktionaalisesta rajapinnasta:

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

@FunctionalInterface-annotaatio on valinnainen, mutta se auttaa kääntäjää ja kehittäjiä varmistamaan, että rajapinta pysyy funktionaalisena ja estää useiden abstraktien metodien lisäämisen.

Miksi niitä tarvitaan?

Stream API:ssa funktionaalisia rajapintoja käytetään välittämään erilaisia toimintoja metodeihin, jotka käsittelevät datan kokoelmia.

Esimerkiksi voit välittää suodatusehdon metodille, joka valitsee tiettyjä alkioita listasta, tai antaa operaation, joka muuntaa jokaisen alkion, kuten filter()- ja map()-metodeissa.

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

filter()-metodi käyttää erityistä funktionaalista rajapintaa nimeltä Predicate<T> (johon perehdyt myöhemmin), joka tarkistaa, täyttääkö alkio tietyn ehdon. Tässä tapauksessa lambda-lauseke n -> n % 2 == 0 määrittää, onko luku parillinen. Jos luku on jaollinen kahdella ilman jakojäännöstä, se säilyy virrassa.

Oman funktionaalisen rajapinnan luominen

Tarvittaessa rajapinta aritmeettisten operaatioiden, kuten yhteenlaskun tai vähennyslaskun, suorittamiseen. Voit luoda funktionaalisen rajapinnan nimeltä ArithmeticOperation, jossa on metodi apply, joka suorittaa operaation kahdelle luvulle, a ja b.

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

Nyt kun sinulla on rajapinta, voit käyttää lambda-lausekkeita määritelläksesi erilaisia operaatioita kuten yhteenlasku ja vähennyslasku:

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-lausekkeet (a, b) -> a + b ja (a, b) -> a - b toteuttavat rajapinnan apply-metodin, suorittaen vastaavasti yhteenlaskun ja vähennyksen. Ensimmäinen lambda-lauseke palauttaa kahden luvun summan, kun taas toinen palauttaa niiden erotuksen.

Tämä lähestymistapa tarjoaa joustavan tavan käyttää erilaisia aritmeettisia operaatioita ilman, että jokaiselle tarvitsee luoda erillistä luokkaa.

1. Mikä on funktionaalinen rajapinta Javassa?

2. Mikä lambda-lauseke toteuttaa oikein seuraavan funktionaalisen rajapinnan?

question mark

Mikä on funktionaalinen rajapinta Javassa?

Select the correct answer

question mark

Mikä lambda-lauseke toteuttaa oikein seuraavan funktionaalisen rajapinnan?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 1. Luku 3
some-alt