🟡 متد رفرنس ها در جاوا Method Refrences
🕓زمان مطالعه: 3:30 دقیقه
پیش از مطالعه این بخش، بخش های زیر را مطالعه کنید:
- فانکشنال اینترفیس و عبارات لامبدا
- استریم ها در جاوا
در جاوای 8، متد رفرنس ها در واقع حالت کوتاه شده ی برخی از عبارات لامبدا برای صدا زدن یک متد هستند و به گونه ای ارجاع به متد را راحت تر و باعث افزایش خوانایی کد میشوند.
🔅نحوه ارجاع متد به یک متد استاتیک:
ClassName::MethodName
بعنوان مثال:
Integer::parseInt یا Math::max
🔅نحوه ارجاع به یک متد غیر استاتیک:
ReferenceVariable::MethodName
مثلا اگر نمونه ی ما s نام داشته باشد، داریم:
s::getName
🔅نحوه ارجاع به کنستراکتور یک کلاس
ClassName::new
برای مثال:
Function<String, Sample> createSample = Sample::new;
بعنوان مثال
🔰مثال:
list.forEach(e->System.out.println(e));
برای پیاده سازی این عبارت لامبدا به کمک متد رفرنس داریم:
list.forEach(System.out::println);
🔰 مثال 2:
BiFunction<Integer,Integer,Integer> findMax = (a,b)-> Math.max(a,b);
برای پیاده سازی این تابع داریم:
BiFunction<Integer,Integer,Integer> findMax =Math::max;
🔰 مثال 3:
ArrayList<Integer> a = new ArrayList<>();
a.add(1);
a.add(20);
a.add(-1);
a.add(4);
Comparator<Integer> comparator = (o1, o2) -> o1-o2;
a.stream()
.sorted(comparator::compare)
.forEach(System.out::println);
در این مثال اینترفیس Comparator را پیاده سازی کرده ایم که داده ها را بصورت صعودی مرتب میکند. حالا از طریق استریم متد compare از comparator را به sorted ارجاع داده ایم و همینطور اینکار را برای متد println نیز انجام داده ایم. پس نتیجه ی خروجی استریم، مرتب سازی داده و چاپ هر کدام از داده های لیست میباشد.
🔰 مثال 4:
public class Main {
public static void main(String[] args) {
Function<String, Sample> createSample = Sample::new;
Sample m = createSample.apply("Mohammad");
System.out.println(m.name());
}
}
record Sample(String name){}
در این نمونه یک تابع ساخته ایم که ورودی آن String و خروجی ان یک نمونه از رکورد Sample میباشد. در این مثال:
Sample::new
معادل
(s)-> new Sample(s)
میباشد.
————
#method #method_reference #lambda #stream
☕️@PieceJava
🕓زمان مطالعه: 3:30 دقیقه
پیش از مطالعه این بخش، بخش های زیر را مطالعه کنید:
- فانکشنال اینترفیس و عبارات لامبدا
- استریم ها در جاوا
در جاوای 8، متد رفرنس ها در واقع حالت کوتاه شده ی برخی از عبارات لامبدا برای صدا زدن یک متد هستند و به گونه ای ارجاع به متد را راحت تر و باعث افزایش خوانایی کد میشوند.
🔅نحوه ارجاع متد به یک متد استاتیک:
ClassName::MethodName
بعنوان مثال:
Integer::parseInt یا Math::max
🔅نحوه ارجاع به یک متد غیر استاتیک:
ReferenceVariable::MethodName
مثلا اگر نمونه ی ما s نام داشته باشد، داریم:
s::getName
🔅نحوه ارجاع به کنستراکتور یک کلاس
ClassName::new
برای مثال:
Function<String, Sample> createSample = Sample::new;
بعنوان مثال
🔰مثال:
list.forEach(e->System.out.println(e));
برای پیاده سازی این عبارت لامبدا به کمک متد رفرنس داریم:
list.forEach(System.out::println);
🔰 مثال 2:
BiFunction<Integer,Integer,Integer> findMax = (a,b)-> Math.max(a,b);
برای پیاده سازی این تابع داریم:
BiFunction<Integer,Integer,Integer> findMax =Math::max;
🔰 مثال 3:
ArrayList<Integer> a = new ArrayList<>();
a.add(1);
a.add(20);
a.add(-1);
a.add(4);
Comparator<Integer> comparator = (o1, o2) -> o1-o2;
a.stream()
.sorted(comparator::compare)
.forEach(System.out::println);
در این مثال اینترفیس Comparator را پیاده سازی کرده ایم که داده ها را بصورت صعودی مرتب میکند. حالا از طریق استریم متد compare از comparator را به sorted ارجاع داده ایم و همینطور اینکار را برای متد println نیز انجام داده ایم. پس نتیجه ی خروجی استریم، مرتب سازی داده و چاپ هر کدام از داده های لیست میباشد.
🔰 مثال 4:
public class Main {
public static void main(String[] args) {
Function<String, Sample> createSample = Sample::new;
Sample m = createSample.apply("Mohammad");
System.out.println(m.name());
}
}
record Sample(String name){}
در این نمونه یک تابع ساخته ایم که ورودی آن String و خروجی ان یک نمونه از رکورد Sample میباشد. در این مثال:
Sample::new
معادل
(s)-> new Sample(s)
میباشد.
————
#method #method_reference #lambda #stream
☕️@PieceJava
Telegram
تیکه پاره های جاوا
💠 فانکشنال اینترفیس و بررسی عبارات لامبدا
🔆 فانکشنال اینترفیس در واقع به اینترفیسی گفته میشود که تنها یک متد ابسترکت را داشته باشد (Single Abstract Method) هر چند که همچنان میتواند دارای متد های استاتیک و دیفالت باشد. برای نشانه گذاری اینترفیس فانکشنال،…
🔆 فانکشنال اینترفیس در واقع به اینترفیسی گفته میشود که تنها یک متد ابسترکت را داشته باشد (Single Abstract Method) هر چند که همچنان میتواند دارای متد های استاتیک و دیفالت باشد. برای نشانه گذاری اینترفیس فانکشنال،…
👍5