Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Predikaatti: Tietojen Suodatus | Stream API:n Perusteet ja Toiminnalliset Ominaisuudet
Stream API

bookPredikaatti: Tietojen Suodatus

Predicate-rajapinnan ensisijainen tarkoitus on mahdollistaa kätevä datan suodatus annetun ehdon perusteella. Tämä funktionaalinen rajapinta sisältää yhden abstraktin metodin:

@FunctionalInterface
public interface Predicate<T> {
    boolean test(T t);
}

Lisäksi se tarjoaa oletusmetodeja ehtojen yhdistämiseen, kuten and(), or() ja negate(), joita käsitellään myöhemmin.

Käytännön sovellus

Kaikkien funktionaalisten rajapintojen syntaksi noudattaa samanlaista kaavaa ja on varsin yksinkertainen:

Predicate<T> predicate = t -> condition;

Tässä T edustaa syöteparametrin tyyppiä, ja condition on lauseke, joka palauttaa joko true tai false.

Oletetaan, että täytyy tarkistaa, onko annettu luku parillinen. Tätä varten voidaan käyttää Predicate-rajapintaa seuraavasti:

Main.java

Main.java

copy
1234567891011121314151617
package com.example; import java.util.function.Predicate; public class Main { public static void main(String[] args) { // Condition: Check if a number is even Predicate<Integer> isEven = number -> number % 2 == 0; int number = 4; if (isEven.test(number)) { System.out.println(number + " is an even number."); } else { System.out.println(number + " is an odd number."); } } }

Tämä koodi käyttää test()-rajapinnan Predicate-metodia, joka on tarkoitettu ehtojen arviointiin. Kun test() kutsutaan, suoritetaan lambda-lausekkeessa number -> number % 2 == 0 määritelty logiikka, joka tarkistaa, onko luku jaollinen 2:lla ilman jäännöstä, mikä määrittää sen parillisuuden.

Tässä Predicate-rajapintaa käytetään tarkistamaan, onko annettu luku parillinen, ja test()-metodi soveltaa ehtoa.

Ehtojen yhdistäminen

Predicate mahdollistaa ehtojen yhdistämisen käyttämällä metodeja and(), or() ja negate(). Tämä mahdollistaa monimutkaisempien tarkistusten tekemisen. Käydään läpi joitakin esimerkkejä:

JA-ehto

Oletetaan, että täytyy tarkistaa, täyttääkö luku kaksi kriteeriä: sen tulee olla suurempi kuin 10 ja parillinen.

Tätä varten voidaan käyttää and()-metodia, aivan kuten Java-kielen && operaattoria, jotta molempien ehtojen tulee palauttaa true.

Main.java

Main.java

copy
1234567891011121314151617181920212223
package com.example; import java.util.function.Predicate; public class Main { public static void main(String[] args) { // Condition 1: The number is greater than 10 Predicate<Integer> isGreaterThanTen = number -> number > 10; // Condition 2: The number is even Predicate<Integer> isEven = number -> number % 2 == 0; // Combined condition: The number is greater than 10 and even Predicate<Integer> combinedCondition = isGreaterThanTen.and(isEven); int number = 12; if (combinedCondition.test(number)) { System.out.println(number + " meets both conditions."); } else { System.out.println(number + " does not meet the conditions."); } } }

and()-metodi yhdistää kaksi ehtoa. Luvun tulee täyttää molemmat kriteerit, jotta tulos on true.

TAI-ehto

Oletetaan nyt, että täytyy tarkistaa, onko luku joko alle 5 tai yli 15.

Voit käyttää or()-metodia, aivan kuten ||-operaattoria Javassa, varmistaaksesi, että vähintään yksi ehdoista palauttaa true.

Main.java

Main.java

copy
1234567891011121314151617181920212223
package com.example; import java.util.function.Predicate; public class Main { public static void main(String[] args) { // Condition 1: The number is less than 5 Predicate<Integer> isLessThanFive = number -> number < 5; // Condition 2: The number is greater than 15 Predicate<Integer> isGreaterThanFifteen = number -> number > 15; // Combined condition: The number is less than 5 or greater than 15 Predicate<Integer> combinedCondition = isLessThanFive.or(isGreaterThanFifteen); int number = 3; if (combinedCondition.test(number)) { System.out.println(number + " meets at least one of the conditions."); } else { System.out.println(number + " does not meet any of the conditions."); } } }

or()-metodi tarkistaa, täyttääkö luku vähintään yhden annetuista ehdoista. Tämä on hyödyllistä, kun riittää, että vain yksi kriteeri täyttyy.

NEGATE-ehto

Oletetaan, että täytyy tarkistaa, onko merkkijono ei tyhjä.

Voit käyttää negate()-metodia, aivan kuten Java:n ! operaattoria, kääntääksesi ehdon tuloksen.

Main.java

Main.java

copy
1234567891011121314151617181920
package com.example; import java.util.function.Predicate; public class Main { public static void main(String[] args) { // Condition: The string is empty Predicate<String> isEmpty = str -> str == null || str.isEmpty(); // Condition: The string is not empty Predicate<String> isNotEmpty = isEmpty.negate(); String text = "Hello"; if (isNotEmpty.test(text)) { System.out.println("The string contains text: " + text); } else { System.out.println("The string is empty."); } } }

negate()-metodi kääntää ehdon. Jos alkuperäinen ehto palauttaa true, käänteinen versio palauttaa false, ja päinvastoin.

1. Mikä on Predicate-funktionaalisen rajapinnan ensisijainen tarkoitus Javassa?

2. Mikä on seuraavan koodin tuloste?

question mark

Mikä on Predicate-funktionaalisen rajapinnan ensisijainen tarkoitus Javassa?

Select the correct answer

question mark

Mikä on seuraavan koodin tuloste?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 1. Luku 4

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

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

Awesome!

Completion rate improved to 2.33

bookPredikaatti: Tietojen Suodatus

Pyyhkäise näyttääksesi valikon

Predicate-rajapinnan ensisijainen tarkoitus on mahdollistaa kätevä datan suodatus annetun ehdon perusteella. Tämä funktionaalinen rajapinta sisältää yhden abstraktin metodin:

@FunctionalInterface
public interface Predicate<T> {
    boolean test(T t);
}

Lisäksi se tarjoaa oletusmetodeja ehtojen yhdistämiseen, kuten and(), or() ja negate(), joita käsitellään myöhemmin.

Käytännön sovellus

Kaikkien funktionaalisten rajapintojen syntaksi noudattaa samanlaista kaavaa ja on varsin yksinkertainen:

Predicate<T> predicate = t -> condition;

Tässä T edustaa syöteparametrin tyyppiä, ja condition on lauseke, joka palauttaa joko true tai false.

Oletetaan, että täytyy tarkistaa, onko annettu luku parillinen. Tätä varten voidaan käyttää Predicate-rajapintaa seuraavasti:

Main.java

Main.java

copy
1234567891011121314151617
package com.example; import java.util.function.Predicate; public class Main { public static void main(String[] args) { // Condition: Check if a number is even Predicate<Integer> isEven = number -> number % 2 == 0; int number = 4; if (isEven.test(number)) { System.out.println(number + " is an even number."); } else { System.out.println(number + " is an odd number."); } } }

Tämä koodi käyttää test()-rajapinnan Predicate-metodia, joka on tarkoitettu ehtojen arviointiin. Kun test() kutsutaan, suoritetaan lambda-lausekkeessa number -> number % 2 == 0 määritelty logiikka, joka tarkistaa, onko luku jaollinen 2:lla ilman jäännöstä, mikä määrittää sen parillisuuden.

Tässä Predicate-rajapintaa käytetään tarkistamaan, onko annettu luku parillinen, ja test()-metodi soveltaa ehtoa.

Ehtojen yhdistäminen

Predicate mahdollistaa ehtojen yhdistämisen käyttämällä metodeja and(), or() ja negate(). Tämä mahdollistaa monimutkaisempien tarkistusten tekemisen. Käydään läpi joitakin esimerkkejä:

JA-ehto

Oletetaan, että täytyy tarkistaa, täyttääkö luku kaksi kriteeriä: sen tulee olla suurempi kuin 10 ja parillinen.

Tätä varten voidaan käyttää and()-metodia, aivan kuten Java-kielen && operaattoria, jotta molempien ehtojen tulee palauttaa true.

Main.java

Main.java

copy
1234567891011121314151617181920212223
package com.example; import java.util.function.Predicate; public class Main { public static void main(String[] args) { // Condition 1: The number is greater than 10 Predicate<Integer> isGreaterThanTen = number -> number > 10; // Condition 2: The number is even Predicate<Integer> isEven = number -> number % 2 == 0; // Combined condition: The number is greater than 10 and even Predicate<Integer> combinedCondition = isGreaterThanTen.and(isEven); int number = 12; if (combinedCondition.test(number)) { System.out.println(number + " meets both conditions."); } else { System.out.println(number + " does not meet the conditions."); } } }

and()-metodi yhdistää kaksi ehtoa. Luvun tulee täyttää molemmat kriteerit, jotta tulos on true.

TAI-ehto

Oletetaan nyt, että täytyy tarkistaa, onko luku joko alle 5 tai yli 15.

Voit käyttää or()-metodia, aivan kuten ||-operaattoria Javassa, varmistaaksesi, että vähintään yksi ehdoista palauttaa true.

Main.java

Main.java

copy
1234567891011121314151617181920212223
package com.example; import java.util.function.Predicate; public class Main { public static void main(String[] args) { // Condition 1: The number is less than 5 Predicate<Integer> isLessThanFive = number -> number < 5; // Condition 2: The number is greater than 15 Predicate<Integer> isGreaterThanFifteen = number -> number > 15; // Combined condition: The number is less than 5 or greater than 15 Predicate<Integer> combinedCondition = isLessThanFive.or(isGreaterThanFifteen); int number = 3; if (combinedCondition.test(number)) { System.out.println(number + " meets at least one of the conditions."); } else { System.out.println(number + " does not meet any of the conditions."); } } }

or()-metodi tarkistaa, täyttääkö luku vähintään yhden annetuista ehdoista. Tämä on hyödyllistä, kun riittää, että vain yksi kriteeri täyttyy.

NEGATE-ehto

Oletetaan, että täytyy tarkistaa, onko merkkijono ei tyhjä.

Voit käyttää negate()-metodia, aivan kuten Java:n ! operaattoria, kääntääksesi ehdon tuloksen.

Main.java

Main.java

copy
1234567891011121314151617181920
package com.example; import java.util.function.Predicate; public class Main { public static void main(String[] args) { // Condition: The string is empty Predicate<String> isEmpty = str -> str == null || str.isEmpty(); // Condition: The string is not empty Predicate<String> isNotEmpty = isEmpty.negate(); String text = "Hello"; if (isNotEmpty.test(text)) { System.out.println("The string contains text: " + text); } else { System.out.println("The string is empty."); } } }

negate()-metodi kääntää ehdon. Jos alkuperäinen ehto palauttaa true, käänteinen versio palauttaa false, ja päinvastoin.

1. Mikä on Predicate-funktionaalisen rajapinnan ensisijainen tarkoitus Javassa?

2. Mikä on seuraavan koodin tuloste?

question mark

Mikä on Predicate-funktionaalisen rajapinnan ensisijainen tarkoitus Javassa?

Select the correct answer

question mark

Mikä on seuraavan koodin tuloste?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 1. Luku 4
some-alt