Lambdas (Java 8+) هي دوال مجهولة موجزة، وfunctional interface هي واجهة بها بالضبط دالة مجردة واحدة — نوع الهدف الذي تطبقه lambda. معاً، جلبوا البرمجة الوظيفية إلى Java وتشغيل Stream API.
واجهة دالية
{
;
}
Lambdas (Java 8+) هي دوال مجهولة موجزة، وfunctional interface هي واجهة بها بالضبط دالة مجردة واحدة — نوع الهدف الذي تطبقه lambda. معاً، جلبوا البرمجة الوظيفية إلى Java وتشغيل Stream API.
{
;
}
الواجهة التي بها دالة مجردة واحدة هي "دالية" — يمكن لـ lambda أن تطبقها لأنه لا يوجد غموض حول أي دالة تمثلها lambda.
// ❌ verbose anonymous class (pre-Java 8)
Calculator add = new Calculator() {
public int calculate(int a, int b) { return a + b; }
};
// ✅ lambda — same thing, far less boilerplate
Calculator add = (a, b) -> a + b;
Calculator multiply = (a, b) -> a * b;
add.calculate(2, 3); // 5
توفر lambda (a, b) -> a + b تطبيق الدالة الوحيدة — بدون فئة، بدون نمطية توقيع الطريقة.
Function<String, Integer> length = s -> s.length(); // takes T, returns R
Predicate<Integer> isPositive = n -> n > 0; // takes T, returns boolean
Consumer<String> printer = s -> System.out.println(s); // takes T, returns void
Supplier<String> greeting = () -> "Hello"; // takes nothing, returns T
BiFunction<Integer, Integer, Integer> sum = (a, b) -> a + b; // two args
توفر Java واجهات دالية جاهزة للأشكال الشائعة، وتستخدم في جميع أنحاء المكتبة القياسية (خاصة streams).
// when a lambda just calls an existing method, use a method reference
list.forEach(System.out::println); // instead of x -> System.out.println(x)
list.stream().map(String::toUpperCase); // instead of s -> s.toUpperCase()
list.stream().map(Integer::parseInt); // static method ref
// passing behavior as arguments — the core enabler of the Stream API
people.stream()
.filter(p -> p.getAge() > 18) // Predicate lambda
.map(Person::getName) // method reference
.forEach(System.out::println); // Consumer
list.sort((a, b) -> a.compareTo(b)); // Comparator lambda
button.addActionListener(e -> handleClick()); // event handler
جلبت Lambdas والواجهات الدالية البرمجة الوظيفية إلى Java، مما غيّر بشكل جذري كيفية كتابة Java الحديثة.
تلغي الحاجة إلى نمطية فئات مجهولة المصدر المطولة لتمرير السلوك كبيانات، مما يتيح معالجات أحداث موجزة، ومقارنات، واستدعاءات — والأهم من ذلك — كل Stream API (الذي يعتمد على lambdas لعمليات filter/map/reduce).
فهم أن lambda تستهدف واجهة دالية (دالة مجردة واحدة)، والواجهات المدمجة (Function و Predicate و Consumer و Supplier)، ومراجع الطريقة ضروري لكتابة Java حديثة معبّرة واستخدام streams والمجموعات وواجهات برمجة التطبيقات المتزامنة بشكل فعال.
هي تمثل تطوراً رئيسياً للغة وهي جزء أساسي من الطلاقة الحالية في Java.