Java 8 содержит большое количество новшеств, сокращающие количество кода и время разработки. Сегодня речь пойдет о лямбда выражениях, сравнении элементов через компаратор, поиске элемента в массиве и о передаче ссылок на методы.
Лямбда - выражения и сравнение элементов через Comparator
Начнем с лямбда выражений, потому что они станут основой данной статьи. Лямбда выражения позволяют описать анонимный класс сокращенно.
Например, когда мы хотим отсортировать строки в порядке возрастания, можно передать анонимный объект класса Comparator в метод sort класса Arrays
Лямбда выражение позволяет сократить данную запись до уровня:
Здесь -> это ключевое слово, через которое происходит вызов метода compareTo из интерфейса Comparator, а (o1, o2) - это параметры для этого метода. Они указываются в круглых скобках.
Такую запись можно использовать для любого интерфейса, содержащего не более одного метода, обязательного для реализации. Например, создадим собственный интерфейс с методом арифметического действия и с помощью этого метода выполним четыре разных действия с числами.
В результате на экране получим:
Сумма 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));
Ссылки на метод позволяют реализовать эту задачу следующим образом:
Здесь :: это ключевое слово, означающее ссылку на метод compareTo, а String - тип данных элементов, с которыми работает метод compareTo. Иными словами метод compare будет сравнивать строки из массива arr, значения в параметры метода compareTo будут подставляться автоматически.
Или другой пример с ссылкой на метод:
В этом примере создан интерфейс IConverter, которой выполняет конвертацию значения из типа F (from) в тип T (to).
В качестве реализации для этого метода приравнивается метод getFirstLetter, который принимает строку через параметр и возвращает ее первую букву в типе char.
Здесь под комментариями показано, как выглядела бы эта операция с обычным лямбда выражением без ссылки на метод.
Таким образом при обращении к методу convert сработает реализация метода getFirstLetter
Проверка элемента на наличие в массиве
Без Java 8:
Создаем метод, перебирающий каждый элемент и сравнивающий его с искомым
В мейне передаем массив в метод и получаем результат:
С применением Java 8:
Вызываем метод anyMath, в который передаем ссылку на метод equals и полученный результат выводим на экран. Вся операция заняла всего одну строку.
Надеюсь, тебе понравились фишки из Java 8, если статья была тебе полезна, не забудь поставить лайк.
Если хочешь научиться программировать или повысить свой навык, записывайся на бесплатное пробное занятие к нам в школу
Если остались вопросы - пиши в комменты.