Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Predikaatti: Tietojen Suodatus | Osio
Practice
Projects
Quizzes & Challenges
Visat
Challenges
/
Stream API Javassa

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öteargumentin 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, se suorittaa lambda-lausekkeessa number -> number % 2 == 0 määritellyn logiikan, tarkistaen, onko luku jaollinen 2:lla ilman jäännöstä, mikä määrittää luvun parillisuuden.

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

Ehtojen yhdistäminen

Predicate mahdollistaa ehtojen yhdistämisen metodeilla and(), or() ja negate(). Tämä mahdollistaa monimutkaisemmat tarkistukset. Käydään läpi joitakin esimerkkejä:

JA-ehto

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

Tätä varten voidaan käyttää and()-metodia, aivan kuten Java-kielen && operaattoria, jotta varmistetaan, että molempien ehtojen on palautettava 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 on täytettävä molemmat kriteerit, jotta tulos on true.

OR-ehto

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

Voit käyttää or()-metodia, aivan kuten Java-kielen ||-operaattoria, 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äännetty 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

Osio 1. Luku 4
some-alt