Найти тему
SmartBrain

Как новые фишки из Java 8 могут серьезно облегчить жизнь

Java 8 содержит большое количество новшеств, сокращающие количество кода и время разработки. Сегодня речь пойдет о лямбда выражениях, сравнении элементов через компаратор, поиске элемента в массиве и о передаче ссылок на методы.

Лямбда - выражения и сравнение элементов через Comparator

Начнем с лямбда выражений, потому что они станут основой данной статьи. Лямбда выражения позволяют описать анонимный класс сокращенно.

Например, когда мы хотим отсортировать строки в порядке возрастания, можно передать анонимный объект класса Comparator в метод sort класса Arrays

-2

Лямбда выражение позволяет сократить данную запись до уровня:

-3

Здесь -> это ключевое слово, через которое происходит вызов метода compareTo из интерфейса Comparator, а (o1, o2) - это параметры для этого метода. Они указываются в круглых скобках. 

Такую запись можно использовать для любого интерфейса, содержащего не более одного метода, обязательного для реализации. Например, создадим собственный интерфейс с методом арифметического действия и с помощью этого метода выполним четыре разных действия с числами.

-4

В результате на экране получим:

Сумма 2 и 5 = 7.0
Разница 2 и 5 = -3.0
Произведение 2 и 5 = 10.0
Деление 2 и 5 = 0.4

Передача ссылки на метод

Лямбда выражения, рассмотренные выше позволяют сократить код, а ссылки на метод снижают его количество до минимума. 

В предыдущем примере мы рассмотрели, как создать анонимный объект класса Comparator с помощью лямбда выражения. Напомню этот момент:

String[] arr = {"b", "x", "z", "a"};
Arrays.sort(arr, (o1,o2)->o1.compareTo(o2));

Ссылки на метод позволяют реализовать эту задачу следующим образом:

-5

Здесь :: это ключевое слово, означающее ссылку на метод compareTo, а String - тип данных элементов, с которыми работает метод compareTo. Иными словами метод compare будет сравнивать строки из массива arr, значения в параметры метода compareTo будут подставляться автоматически.

Или другой пример с ссылкой на метод:

-6

В этом примере создан интерфейс IConverter, которой выполняет конвертацию значения из типа F (from) в тип T (to).

В качестве реализации для этого метода приравнивается метод getFirstLetter, который принимает строку через параметр и возвращает ее первую букву в типе char.

Здесь под комментариями показано, как выглядела бы эта операция с обычным лямбда выражением без ссылки на метод.

Таким образом при обращении к методу convert сработает реализация метода getFirstLetter

Проверка элемента на наличие в массиве

Без Java 8:

Создаем метод, перебирающий каждый элемент и сравнивающий его с искомым

-7

В мейне передаем массив в метод и получаем результат:

-8

С применением Java 8:

Вызываем метод anyMath, в который передаем ссылку на метод equals и полученный результат выводим на экран. Вся операция заняла всего одну строку.

-9

Надеюсь, тебе понравились фишки из Java 8, если статья была тебе полезна, не забудь поставить лайк.

Если хочешь научиться программировать или повысить свой навык, записывайся на бесплатное пробное занятие к нам в школу

Если остались вопросы - пиши в комменты.