Java Predicate Example-Predicate Filter

w matematyce, predykat jest powszechnie rozumiany jako funkcja o wartości logicznej 'P: X? {true, false}', zwana predykatem na X. nieformalnie, silny. Może być traktowany jako operator lub funkcja, która zwraca wartość truelub false.

użycie predykatów Java 8

w Java 8 predykat jest funkcjonalnym interfejsem i może być zatem użyty jako cel przypisania wyrażenia lambda lub odniesienia do metody. Więc, gdzie myślisz, że możemy użyć tych funkcji zwracających prawdę/fałsz w codziennym programowaniu? Powiem, że można używać predykatów wszędzie tam, gdzie trzeba ocenić warunek na grupie / zbiorze podobnych obiektów tak, że ocena może wynikać albo w true lub false.

na przykład, możesz użyć prdicates w tych realtime usecases

  1. Znajdź wszystkie dzieci urodzone po określonej dacie
  2. pizze zamówiły określony czas
  3. pracownicy powyżej określonego wieku i tak dalej..

Klasa predykatów Java

więc predykaty java wydają się być interesującą rzeczą. Chodźmy głębiej.

jak powiedziałem, Predicate jest funkcjonalnym interfejsem. Oznacza to, że możemy przekazywać wyrażenia lambda wszędzie tam, gdzie oczekuje się predykatu. Na przykład jedną z takich metod jest filter() metoda z interfejsu strumienia.

możemy przyjąć strumień jako mechanizm do tworzenia sekwencji elementów wspierających sekwencyjne i równoległe operacje agregacji. Oznacza to, że możemy w każdej chwili zebrać i wykonać pewną operację wszystkich elementów obecnych w strumieniu w jednym wywołaniu.

więc zasadniczo możemy użyć stream i predicate do–

  • najpierw filtruj niektóre elementy z grupy, a następnie
  • wykonaj pewną operację na przefiltrowanych elementach.

używając predykatu na kolekcji

, aby zademonstrować, mamy klasęEmployee jak poniżej:

1. Wszyscy pracownicy, którzy są mężczyznami i wiek więcej niż 21

public static Predicate<Employee> isAdultMale() { return p -> p.getAge() > 21 && p.getGender().equalsIgnoreCase("M");}

2. Wszyscy pracownicy, którzy są kobietami i wiek więcej niż 18

public static Predicate<Employee> isAdultFemale() { return p -> p.getAge() > 18 && p.getGender().equalsIgnoreCase("F");}

3. Wszyscy pracownicy, których wiek jest większy niż dany wiek

public static Predicate<Employee> isAgeMoreThan(Integer age) { return p -> p.getAge() > age;}

możesz zbudować ich więcej w razie potrzeby. Jak na razie dobrze. Daleko stosując powyższe metody zawarłem powyższe metody 3 w EmployeePredicates.java:

widzisz, że utworzyłem inną metodę narzędzia filterEmployees (), aby wyświetlić filtr predykatów Javy. Jest to po to, aby Kod był czysty i mniej powtarzalny. Możesz również napisać więcej niż jeden predykat, aby utworzyć łańcuch predykatów, jak to robimy w builder pattern.

tak więc, w tej funkcji przekazujemy listę employees i przekazujemy predykat, wtedy ta funkcja zwróci nowy zbiór employees spełniający warunek wymieniony w predykacie parametrów.

predykaty są naprawdę bardzo dobrym dodatkiem w Javie 8 i zamierzam go używać, gdy tylko będę miał okazję.

ostatnie przemyślenia na temat predykatów w Javie 8

  1. przenoszą twoje warunki (czasami logikę biznesową) na centralne miejsce. Pomaga to w testowaniu ich osobno.
  2. żadna zmiana nie musi być powielana w wielu miejscach. Predykat Java usprawnia obsługę kodu.
  3. kod np. „filterEmployees (employees, isadultfemale ())” jest bardzo czytelny niż zapis bloku if-else.