پیاده‌سازی حلقه‌های تودرتو با استفاده از لامبدا در جاوا ۸

جاوا یک زبان برنامه‌نویسیِ شیءگرا است که برای نخستین بار توسط جیمز گاسلینگ در شرکت سان مایکروسیستمز ایجاد گردید. یکی از قابلیت‌های بنیادین جاوا این است که مدیریت حافظه را بطور خودکار انجام می‌دهد. ضریب اطمینان عملکرد برنامه‌های نوشته‌شده به این زبان نسبت به زبانهای نسل اول C بالا است و وابسته به سیستم‌عامل خاصی نیست. فرض کنید یک List یا Set از یک parentObject داریم که آن نیز یک لیست یا List یا Set از یک childObject دارد. می‌خواهیم روی یکی از peopertyهای خاص childObject یک مقایسه انجام دهیم.

راه‌حل اولیه برای این کار استفاده از دو حلقه for تودرتو به صورت زیر است:

for (ParentObject parentObject : parentObjects)  
    for (ChildObject childObject : parentObject.getChildObjects())  
        if (childObject.getProperty().equals(anObject))  
            return true; // one parentObject matches...

یکی از راه‌حل‌های پیشنهادی برای انجام این کار، استفاده از Lambda Expressions و stream در جاوا ۸ است. برای این منظور می‌توانیم از قطعه کد زیر استفاده کنیم:

parentObjects.stream().anyMatch(p -> p.getChildObjects().stream().anyMatch(c -> c.getProperty().equals(anObject)));

در کد بالا روی parentObject یک Stream ایجاد شده و سپس یک Stream دیگر روی childObject ایجاد کردیم و با متد anyMatch  درصورت پیداکردن اولین تطابق خروجیtrueو درغیر اینصورت false خواهد بود.


برچسب‌ها: ، ، ، ، ، ، ،
مرتضی اسدی
مرتضی اسدی

سلام! من مرتضی اسدی هستم، یک توسعه‌دهنده‌ی نرم‌افزار و در این وبلاگ دست‌نوشته‌هایم را می‌نویسم.