Як правило я намагаюся чекати релізу, але зараз в новинах стільки розмов про лямбда-виразах в новій Java, що мені, старому Scala -фанатіку і функціонального програмування, вже дуже сильно захотілося погратися з новими можливостями мови. Якщо дивитися на всі нововведення восьмий Java з боку Scala програміста, то в цілому особисто я ставлюся до них позитивно, оскільки такий розклад можливо призведе до зменшення розриву між міццю синтаксису Scala і поточної (сьомий) версією Java як мови програмування. Хоча звичайно, навіть з усіма нововведеннями вісімки Java буде сильно відставати від Scala.
JDK з "Lambda Project" можна завантажити c офіційної сторінки.
Також в поточній збірці JDK 8 (на момент написання статті) лямбда вже теж є, але API з колекціями ще не повністю завершено.
Метою даної статті не написання навчального посібника з новим функціям Java, думаю цією роботою повинні займатися хлопці з Oracle. Тут я хотів зробити невеликі замітки для себе на майбутнє разом з невеликими прикладами коду, до яких хотілося б повернутися після офіційного випуску JDK 8.
У побутовому, чисто утилітарному сенсі, під цієї горезвісної лямбда (або лямбда-виразами) багато програмістів як правило мають на увазі звичайні анонімні функції (хоча звичайно це не строге визначення). Причому під функцією мається на увазі першокласний об'єкт. Його можна передавати як об'єкт в аргументи методу, привласнювати якоїсь змінної і т.д. З точки зору кінцевого користувача (в нашому випадку програміста) ми отримуємо зручний спосіб скорочувати кількість рядків коду, без сильної втрати в його читаності.
Один з найбільш часто зустрічаються прикладів в інтернеті, що демонструють користь від використання лямбда - заміна старих добрих анонімних класів.
Порівняйте. Це новий варіант:
String arr [] =; Arrays.parallelSort (arr, (x, y) -> x.compareToIgnoreCase (y));
Функціональщікі якраз люблять такі багатопотокові методи. На жаль, на моїх тестах в використовуваної версії JDK 8 від використання parallelSort користь була тільки на примітивних даних (наприклад при сортування масивів int-ів). На масивах з об'єктами ніякої користі не було, але ж і реліз тільки через кілька місяців, так що зараз ніяких серйозних тестів швидкості проводити некоректно.
Думаю багато хто погодиться, що вісімка не скоро буде тотально домінувати на серверах і використовуватися в промисловій експлуатації, оскільки існує досить велика прошарку особливо консервативних Java-програмістів. Проте функціональщіна зараз в світовому програмістки тренді, тому Java 8 це безумовно цікаво і має сенс витратити надалі додатковий час на її вивчення.