← Назад к вопросам

Какие знаешь функциональные особенности в Java?

1.6 Junior🔥 241 комментариев
#Stream API и функциональное программирование#Основы Java

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Функциональные особенности в Java

Java 8+ включила мощные функциональное программирование возможности, которые трансформировали способ написания кода. Это означает использование функций как значений первого класса.

1. Lambda выражения

Lambda это анонимная функция, которая позволяет писать код компактнее и понятнее:

// Без lambda (старый способ)
Button button = new Button();
button.setOnClickListener(new OnClickListener() {
    public void onClick() {
        System.out.println("Clicked!");
    }
});

// С lambda (современный способ)
button.setOnClickListener(() -> System.out.println("Clicked!"));

2. Functional Interfaces

Функциональный интерфейс это интерфейс с одним абстрактным методом. Он может быть реализован через lambda:

public interface Calculator {
    int calculate(int a, int b);
}

Calculator add = (a, b) -> a + b;
Calculator multiply = (a, b) -> a * b;

int result1 = add.calculate(5, 3);        // 8
int result2 = multiply.calculate(5, 3);   // 15

Встроенные функциональные интерфейсы:

  • Function преобразует T в R
  • Predicate возвращает boolean
  • Consumer выполняет действие, не возвращает результат
  • Supplier возвращает значение, не принимает параметров
  • BiFunction принимает два параметра

3. Streams API

Stream это абстракция для работы с последовательностями данных функциональным способом:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);

List<Integer> result = numbers.stream()
    .filter(n -> n > 2)
    .map(n -> n * 2)
    .collect(Collectors.toList());

Основные операции:

  • filter() отфильтровать элементы
  • map() преобразовать каждый элемент
  • flatMap() преобразовать и развернуть
  • reduce() свернуть в один результат
  • forEach() выполнить действие
  • sorted() отсортировать
  • distinct() удалить дубликаты

4. Method References

Method reference это более компактный способ использования lambda:

Function<String, Integer> parseInt = Integer::parseInt;
Consumer<String> print = System.out::println;
String str = "hello";
Supplier<Integer> length = str::length;
Supplier<StringBuilder> supplier = StringBuilder::new;

5. Optional для обработки null

Optional это контейнер, который может содержать значение или быть пустым:

Optional<String> name = Optional.of("John");

if (name.isPresent()) {
    System.out.println(name.get());
}

name.ifPresent(System.out::println);

String result = name.orElse("Unknown");

6. Параллельные потоки

Parallel Stream позволяет обрабатывать данные параллельно:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);

int sum = numbers.parallelStream()
    .filter(n -> n % 2 == 0)
    .map(n -> n * n)
    .reduce(0, Integer::sum);

Преимущества функционального подхода

  • Читаемость: код становится более декларативным
  • Переиспользование: функции легче комбинировать
  • Параллелизм: проще написать параллельный код
  • Тестируемость: pure функции легче тестировать
  • Меньше ошибок: меньше состояния означает меньше bugs

Функциональный стиль позволяет писать более выразительный и надёжный Java код.

Какие знаешь функциональные особенности в Java? | PrepBro