Sobes.tech
Middle

Java-ში ლამბდა გამოთქმები რა არის და რა შესაძლებლობებს იძლევა?

sobes.tech AI

პასუხი AI-სგან

Java-да лямбда өрнектері — бұл анонимді функцияларды (аты жоқ әдістерді) жасау үшін қысқа синтаксис, олар аргумент ретінде берілуі немесе айнымалыларда сақталуы мүмкін. Негізінен, бұл "жанды" жүзеге асырылған функционалды интерфейстер.

Лямбда өрнектері ұсынатын негізгі мүмкіндіктер:

  • Синтаксисін жеңілдету: Анонимді ішкі сыныптармен салыстырғанда, функционалды интерфейстермен жұмыс істеу кезінде boilerplate-кодты айтарлықтай қысқартады.

    // Лямбдаға дейін:
    Runnable classicRunnable = new Runnable() {
        @Override
        public void run() {
            System.out.println("Классикалық Runnable");
        }
    };
    
    // Лямбдамен:
    Runnable lambdaRunnable = () -> System.out.println("Лямбда Runnable");
    
  • Функционалды программалау: Көбірек функционалды код жазуға мүмкіндік береді, мұнда функциялар бірінші дәрежелі азаматтар болып табылады және деректер ретінде берілуі мүмкін. Бұл Stream API-мен жұмыс істеу үшін маңызды.

    // Лямбда көмегімен тізімді сүзу
    List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
    List<String> filteredNames = names.stream()
                                     .filter(name -> name.startsWith("A"))
                                     .collect(Collectors.toList());
    
  • Stream API-мен жұмыс: Лямбда өрнектері Stream API-нің көп операцияларының негізі (filter, map, forEach, reduce және т.б.), қысқалық пен параллель орындалуды қамтамасыз етеді.

    // Элементтерді түрлендіру және шығару
    List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
    numbers.stream()
           .map(n -> n * n) // map үшін лямбда
           .forEach(System.out::println); // әдіске сілтеме (лямбда нұсқасы)
    
  • Оқылымдылықты жақсарту: Қарапайым операциялар үшін лямбда кодты оқуды жеңілдетеді және түсінуді оңайлатады, назарды операцияға аударады, анонимді сыныптың синтаксисіне емес.

  • Функционалды интерфейстерді жүзеге асыру: Олар кез келген жерде қолданылуы мүмкін, онда функционалды интерфейс мысалы күтілуде (бір абстракт әдісі бар интерфейс).

Лямбда өрнегінің синтаксисі: (параметрлер) -> { дене }

Мысалдар:

  • Параметрлерсіз, қайтарусыз: () -> System.out.println("Hello")
  • Бір параметрлі, қайтарусыз: name -> System.out.println("Hello, " + name) (жақшасыз қолдануға болады)
  • Бірнеше параметрлі, қайтарусыз: (x, y) -> System.out.println(x + y)
  • Параметрлермен, қайтару мәнімен: (a, b) -> a + b (егер дене бір өрнек болса, оның мәні автоматты түрде қайтарылады)
  • Параметрлермен, блокпен және қайтару мәнімен: (a, b) -> { int sum = a + b; return sum; } (айқын return блоктар үшін қажет)