Predica în Java (Română)

Presupun că vorbești despre com.google.common.base.Predicate<T> al guvai.
API:

determină o true sau false pentru o intrare dată. De exemplu, un RegexPredicate ar putea implementa Predicate<String> și devine adevărat pentru orice șir care se potrivește cu expresia obișnuită dată.

ID ID DIV = „5666EGE838″>

Aceasta este, în esență, o abstracție OOP pentru un test

. De exemplu, puteți avea o metodă de ajutor ca acesta:

static boolean isEven(int num) { return (num % 2) == 0; // simple}

acum, dat fiind un List<Integer> puteți procesa numai numerele perechi ca acesta:

 List<Integer> numbers = Arrays.asList(1,2,3,4,5,6,7,8,9,10); for (int number : numbers) { if (isEven(number)) { process(number); } }

cu Predicate if Testul este abstract ca un tip. Acest lucru vă permite să interoperați cu restul API, ca Iterables care au multe metode de utilitate care necesită Predicate. Ambele, acum puteți Scrieți ceva de genul acesta:

 Predicate<Integer> isEven = new Predicate<Integer>() { @Override public boolean apply(Integer number) { return (number % 2) == 0; } }; Iterable<Integer> evenNumbers = Iterables.filter(numbers, isEven); for (int number : evenNumbers) { process(number); }

Vă rog acum că bucla fiecărui este mult mai simplă fără testul

EF88B3C87 „>

. Am ajuns la un nivel mai ridicat de abstractizare prin definirea Iterable<Integer> evenNumbers bb78d16367 „>

folosind un Predicate

API Link-uri

  • Iterables.filter
    • returnează elementele care îndeplinesc un predicat.

în funcția de ordine superioară

Predicate permite Iterables.filter pentru a servi ca ceea ce se numește o funcție de ordin superior. Prin ea însăși, acest lucru oferă multe avantaje. Luați exemplul anterior. Să presupunem că vrem să verificăm dacă toate numerele sunt pozitive. Putem scrie ceva de genul ăsta:

static boolean isAllPositive(Iterable<Integer> numbers) { for (int number : numbers) { if (number <= 0) { return false; } } return true;}//...if (isAllPositive(numbers)) { System.out.println("Yep!");}

cu un Predicate și intervenind cu restul bibliotecilor, noi poate scrie acest lucru:

Predicate<Integer> isPositive = new Predicate<Integer>() { @Override public boolean apply(Integer number) { return number > 0; } };//...if (Iterables.all(numbers, isPositive)) { System.out.println("Yep!");}

sperăm că acum puteți vedea valoarea în abstracții mai mari pentru rutine, cum ar fi „Filtrați toate elementele de la predicatul dat”, „Verificați Dacă toate elementele satisfac predicatul dat „, etc. Ele fac un cod mai bun.
Din păcate, Java nu are metode de primă clasă: nu puteți trece metode în jurul valorii de Iterables.filter și iv id = „F1891CCF75”

. Puteți, desigur, să treceți obiecte în Java. Prin urmare, este definită Predicate și obiectele sunt adoptate prin implementarea acestei interfețe în schimb.

vezi și

  • wikipedia / superioară Funcția de comandă
  • wikipedia / filtru (funcția superioară)

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *