این 14-1 را امتحان کنید. یک عبارت لامبدا را به عنوان آرگومان ارسال کنید
مفهوم بیان لامبدا به عنوان استدلال:
- یک عبارت لامبدا را می توان به عنوان آرگومان در روش هایی که انواع هدف سازگار را می پذیرند، ارسال کرد.
- این مفید است زیرا به شما امکان می دهد کدهای اجرایی را به عنوان آرگومان ارسال کنید و کد را رساتر می کند.
هدف مثال:
- با استفاده از عبارات لامبدا توابع دستکاری رشته (معکوس کردن، حروف معکوس و جایگزین کردن فاصله ها با خط تیره) ایجاد کنید.
- این عبارات به متد changeStr() ارسال می شود که توابع را اعمال می کند و نتیجه را برمی گرداند.
ساختار رابط عملکردی:
- رابط StringFunc را با متد func(String str) تعریف کنید که یک رشته را می پذیرد و برمی گرداند.
تعریف متد ()ChangeStr:
متد changeStr() دو پارامتر دارد:
پارامتری از نوع StringFunc (رابط عملکردی).
رشته ای که باید دستکاری شود.
متد تابع Interface را روی String اعمال می کند و نتیجه را برمی گرداند.
استفاده از بیان لامبدا:
مثال 1: عبارت Lambda که کاراکترهای یک رشته را معکوس می کند و آن را به متغیر معکوس اختصاص می دهد.
عبارت lambda را به changeStr() منتقل می کند تا رشته را معکوس کند.
مثال 2: عبارت Lambda که فاصله ها را با خط تیره جایگزین می کند و مستقیماً به changeStr().
مثال 3: بلوک عبارت lambda که حروف یک رشته را معکوس می کند و همچنین مستقیماً به changeStr().
نمونه کد کامل:
در زیر کد کاملی وجود دارد که نحوه ارسال عبارات لامبدا را به متد changeStr() نشان می دهد:
interface StringFunc {
String func(String str);
}
class LambdaArgumentDemo {
static String changeStr(StringFunc sf, String s) {
return sf.func(s);
}
public static void main(String args[]) {
String inStr = "Lambda Expressions Expand Java";
String outStr;
System.out.println("Here is input string: " + inStr);
// Expressão lambda para inverter a string
StringFunc reverse = (str) -> {
String result = "";
for (int i = str.length() - 1; i >= 0; i--)
result += str.charAt(i);
return result;
};
// Passando a expressão lambda 'reverse' para o método
outStr = changeStr(reverse, inStr);
System.out.println("The string reversed: " + outStr);
// Expressão lambda para substituir espaços por hífens
outStr = changeStr((str) -> str.replace(' ', '-'), inStr);
System.out.println("The string with spaces replaced: " + outStr);
// Expressão lambda para inverter a caixa das letras
outStr = changeStr((str) -> {
String result = "";
char ch;
for (int i = 0; i < str.length(); i++) {
ch = str.charAt(i);
if (Character.isUpperCase(ch))
result += Character.toLowerCase(ch);
else
result += Character.toUpperCase(ch);
}
return result;
}, inStr);
System.out.println("The string in reversed case: " + outStr);
}
}
خروجی مورد انتظار:
Here is input string: Lambda Expressions Expand Java
The string reversed: avaJ dnapxE snoisserpxE adbmaL
The string with spaces replaced: Lambda-Expressions-Expand-Java
The string in reversed case: lAMBDA eXPRESSIONS eXPAND jAVA
یادداشت ها:
ارسال مستقیم عبارات لامبدا به عنوان آرگومان به متدها، انعطاف پذیری و خوانایی کد را افزایش می دهد.
عبارت لامبدا که حروف را معکوس می کند، پیچیده تر است، اما همچنان می تواند مستقیماً به روش منتقل شود. به طور کلی، لامبداهای پیچیده تر بهتر به متغیرها اختصاص داده می شوند.