Sobes.tech
Middle
99
questionbank

Для чего используются функциональные интерфейсы Predicate<T>, DoublePredicate, IntPredicate и LongPredicate?

Ответ от нейросети

sobes.tech AI

Функциональные интерфейсы Predicate<T>, DoublePredicate, IntPredicate и LongPredicate используются для представления логического теста, который принимает один аргумент и возвращает булево значение (true или false).

  • Predicate<T>: Обобщенный предикат, применяемый к объектам любого типа T.
    // Пример использования Predicate<String>
    Predicate<String> isNotEmpty = s -> !s.isEmpty();
    boolean result = isNotEmpty.test("Hello"); // result будет true
    
  • DoublePredicate: Специализированный предикат для примитивного типа double.
    // Пример использования DoublePredicate
    DoublePredicate isPositive = d -> d > 0.0;
    boolean result = isPositive.test(10.5); // result будет true
    
  • IntPredicate: Специализированный предикат для примитивного типа int.
    // Пример использования IntPredicate
    IntPredicate isEven = i -> i % 2 == 0;
    boolean result = isEven.test(4); // result будет true
    
  • LongPredicate: Специализированный предикат для примитивного типа long.
    // Пример использования LongPredicate
    LongPredicate isLarge = l -> l > 1000L;
    boolean result = isLarge.test(2000L); // result будет true
    

Использование этих специализированных предикатов для примитивных типов позволяет избежать автобоксинга и связанных с ним накладных расходов, что повышает производительность при работе с большими объемами данных примитивных типов. Они часто используются в стримах (Stream, DoubleStream, IntStream, LongStream) для операций фильтрации (filter).