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

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?

Valitse oikea vastaus

question mark

Mikä on seuraavan koodin tuloste?

Valitse oikea vastaus

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

Osio 1. Luku 4
some-alt