Метод noneMatch
Метод noneMatch класса Stream проверяет,
что ни один элемент потока не удовлетворяет заданному
условию. В качестве параметра метод принимает
функциональный интерфейс Predicate, который
задаёт проверяемое условие. Если ни один элемент
потока не прошёл проверку - метод возвращает
true, иначе - false. Это терминальная
операция, то есть она запускает обработку потока
и возвращает результат типа boolean.
Метод работает по принципу короткого замыкания:
как только находится первый элемент, удовлетворяющий
условию, дальнейшая обработка потока прекращается
и сразу возвращается false. Если поток пуст,
метод всегда возвращает true.
Синтаксис
stream.noneMatch(predicate)
Пример
Давайте проверим, что в потоке нет чисел,
больших 5:
import java.util.stream.Stream;
public class Main
{
public static void main(String[] args)
{
Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
boolean res = stream.noneMatch(n -> n > 5);
System.out.println(res);
}
}
Результат выполнения кода:
true
Пример
А теперь проверим, что в потоке нет чисел,
больших 3. Так как число 4 и 5
удовлетворяют условию, метод вернёт false:
import java.util.stream.Stream;
public class Main
{
public static void main(String[] args)
{
Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
boolean res = stream.noneMatch(n -> n > 3);
System.out.println(res);
}
}
Результат выполнения кода:
false
Пример
Давайте проверим, что ни одна строка в потоке
не начинается с буквы "x":
import java.util.List;
public class Main
{
public static void main(String[] args)
{
List<String> list = List.of("abcde", "12345", "hello");
boolean res = list.stream()
.noneMatch(s -> s.startsWith("x"));
System.out.println(res);
}
}
Результат выполнения кода:
true
Пример
Проверим поведение метода на пустом потоке.
Для пустого потока метод всегда возвращает
true:
import java.util.stream.Stream;
public class Main
{
public static void main(String[] args)
{
Stream<Integer> stream = Stream.empty();
boolean res = stream.noneMatch(n -> n > 0);
System.out.println(res);
}
}
Результат выполнения кода:
true
Пример
Проверим, что все числа в потоке чётные,
используя обратное условие с noneMatch:
import java.util.stream.Stream;
public class Main
{
public static void main(String[] args)
{
Stream<Integer> stream = Stream.of(2, 4, 6, 8);
boolean res = stream.noneMatch(n -> n % 2 != 0);
System.out.println(res);
}
}
Результат выполнения кода:
true