+1 امتیاز
قبل در برنامه نویسی توسط (426 امتیاز)
ویرایش شده قبل توسط
public static void main(String[] args) {
    List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 0, 9);
    nums.forEach(myAction(it -> System.out.println(100 / it)));
  }
  public static Consumer<Integer> myAction(Consumer< Integer> consumer) {
    return i -> {
      try {
        consumer.accept(i);
      } catch (ArithmeticException e) {
        System.out.println(e.getMessage());
      }
    };
  }

این متد myaction در واقع یک lambda wrapper است که کد رو تمیز تر کنه یعنی جای که داریم از lambda استفاده مکنیم exception handling انجام ندیم و کده خوشگل تری داشته باشیم اما اون i دقبقا چی شد و از کجا اومده؟

1 پاسخ

+1 امتیاز
قبل توسط (1.1هزار امتیاز)
انتخاب شده قبل توسط
 
بهترین پاسخ

متد myAction درون تابع forEach فراخوانی شده پس نوع بازگشتی آن باید Consumer باشد. Consumer تابعی است یک پارامتر می گیرد و از آن استفاده می کند و چیزی هم بر نمی گرداند (void). حالا مقدار بازگشتی متد myAction با استفاده از lambda تعریف شده که i همان یک پارامتری است که Consumer لازم دارد که در ادامه داستان جای متغییر it مینشیند.

قبل توسط (426 امتیاز)
ویرایش شده قبل توسط
خیلی ممنونم از جوابتون

سوالات مشابه

+1 امتیاز
1 پاسخ 1.2هزار بازدید
سوال شده 10 سال قبل در برنامه نویسی توسط Saeed Zarinfam (1.1هزار امتیاز)
+2 امتیاز
1 پاسخ 917 بازدید
+1 امتیاز
1 پاسخ 398 بازدید
0 امتیاز
1 پاسخ 496 بازدید
0 امتیاز
1 پاسخ 515 بازدید
0 امتیاز
1 پاسخ 1.2هزار بازدید
...