Метод and
Метод and класса Predicate используется для
объединения двух предикатов в один. Он возвращает новый
предикат, который возвращает true только в том
случае, если оба исходных предиката вернули true.
В первый параметр мы передаем предикат, который будет
проверяться вторым, а сам метод вызывается на первом
предикате. Если первый предикат вернул false,
то второй уже не проверяется.
Синтаксис
predicate1.and(predicate2)
Пример
Давайте объединим два условия: число должно быть
больше 5 и меньше 15:
import java.util.function.Predicate;
public class Main
{
public static void main(String[] args)
{
Predicate<Integer> greaterThanFive = num -> num > 5;
Predicate<Integer> lessThanFifteen = num -> num < 15;
Predicate<Integer> combined = greaterThanFive.and(lessThanFifteen);
System.out.println(combined.test(10));
System.out.println(combined.test(20));
}
}
Результат выполнения кода:
true
false
Пример
Давайте используем метод and вместе с методом
filter для фильтрации потока чисел:
import java.util.List;
import java.util.function.Predicate;
public class Main
{
public static void main(String[] args)
{
List<Integer> numbers = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
Predicate<Integer> greaterThanThree = num -> num > 3;
Predicate<Integer> lessThanEight = num -> num < 8;
List<Integer> res = numbers.stream()
.filter(greaterThanThree.and(lessThanEight))
.toList();
System.out.println(res);
}
}
Результат выполнения кода:
[4, 5, 6, 7]
Пример
Давайте объединим проверку строки на длину и начинание с определенного символа:
import java.util.function.Predicate;
public class Main
{
public static void main(String[] args)
{
Predicate<String> lengthCheck = str -> str.length() == 5;
Predicate<String> startsWithA = str -> str.startsWith("a");
Predicate<String> combined = lengthCheck.and(startsWithA);
System.out.println(combined.test("abcde"));
System.out.println(combined.test("abc"));
}
}
Результат выполнения кода:
true
false