Изученный материал по Java. Lambda-выражения.
Запись от AlexProgramm размещена 08.09.2023 в 12:20
Закончил тему: 15. Lambda-выражения.
Лямбда-выражение — это такая функция. Можете считать, что это обычный метод в Java, только его особенность в том, что его можно передавать в другие методы в качестве аргумента. Lambda-выражения – это анонимные функции. Проще говоря, это метод без объявления, т.е. без модификаторов доступа, возвращающие значение и имя. Функциональный интерфейс (Functional Interface) – это интерфейс только с одним абстрактным методом, объявленным в нем. Изучал по материалам (javarush): 1. Lambda-выражения на примерах. 2. Популярно о лямбда-выражениях в Java. С примерами и задачами. Часть 1. 3. Популярно о лямбда-выражениях в Java. С примерами и задачами. Часть 2. Задачи. Задача 1-2. 1. Переписать этот пример так, чтобы он сортировал массивы не по возрастанию количества слов в массиве, а по убыванию. 2. Как переписать решение задачи 1 через лямбды.
Написать функциональный интерфейс с методом, который принимает число и возвращает булево значение. Написать реализацию такого интерфейса в виде лямбда-выражения, которое возвращает true если переданное число делится без остатка на 13.
Написать функциональный интерфейс с методом, который принимает две строки и возвращает тоже строку. Написать реализацию такого интерфейса в виде лямбды, которая возвращает ту строку, которая длиннее.
|
Всего комментариев 14
Комментарии
-
Нарочно так пишешь?
Java 1 2 3 4
if (value % 13 == 0) return true; else return false;
?Java 1
return value % 13 == 0;
Method references в первой задаче
Method references в третьей задаче и стандартные предикатыJava 1
var sortByWordsLength = Comparator.comparingInt(String::length);
Java 1 2 3
IntPredicate divideBy13 = a -> a % 13 == 0; Delim13 v3 = divideBy13::test;
Запись от vcrop размещена 17.09.2023 в 11:35
Обновил(-а) vcrop 17.09.2023 в 11:53 -
Цитата:Нарочно так пишешь?
Java 1 2 3 4
if (value % 13 == 0) return true; else return false;
?Java 1
return value % 13 == 0;
Method references в первой задаче
Method references в третьей задаче и стандартные предикатыJava 1
var sortByWordsLength = Comparator.comparingInt(String::length);
Java 1 2 3
IntPredicate divideBy13 = a -> a % 13 == 0; Delim13 v3 = divideBy13::test;
Нет, просто для себя чтоб было более понятно. Вернее даже не "понятно", а быстрее читалось подсознанием.
Не люблю вот так: a += b;
Более приятно для глаза вот так: а = а + b;
Method references в первой задаче
Не сталкивался еще с методом comparingInt() , буду знать !
Method references в третьей задаче и стандартные предикаты
Здесь совсем все сложно
Не знал интерфейс IntPredicate - почитал, разобрался немного
Не понимаю, почему здесь - Delim13 v3 = divideBy13::test; методу test ничего не передается и возвращать он ведь будет boolean!
test(значение int)
Вычисляет этот предикат на основе заданного аргумента.
Параметры:
value - входной аргумент
ВОЗВРАТ:
true если входной аргумент совпадает с предикатом, в противном случае false
А, ну вроде понятно немного, ссылка на метод, здесь не нужно передаваемое значение, оно по умолчанию "а"?Запись от AlexProgramm размещена 17.09.2023 в 14:37
Обновил(-а) AlexProgramm 17.09.2023 в 14:43 -
Запись от AlexProgramm размещена 17.09.2023 в 16:58 -
Запись от AlexProgramm размещена 17.09.2023 в 19:53 -
Запись от AlexProgramm размещена 18.09.2023 в 00:06
Обновил(-а) AlexProgramm 18.09.2023 в 00:10 -
IntPredicate
Это функциональный интерфейс, функциональным методом которого является test(int).
А как же остальные методы, ведь они есть, как IntPredicate может быть функциональным интерфейсом? Не понимаю
default IntPredicate
and(IntPredicate other)
Возвращает составной предикат, который представляет замыкающее логическое И из этого предиката и другого.
default IntPredicate
negate()
Возвращает предикат, который представляет логическое отрицание этого предиката.
default IntPredicate
or(IntPredicate other)
Возвращает составной предикат, который представляет замыкающее логическое ИЛИ из этого предиката и другого.
boolean
test(int value)
Вычисляет этот предикат на основе заданного аргумента.Запись от AlexProgramm размещена 18.09.2023 в 10:14 -
Запись от AlexProgramm размещена 18.09.2023 в 10:19 -
Вот такой пример (вообще бредятина какая то):
2.2.1. Ссылка на статический метод вычисления объема шара
Условие задачи. Разработать статический метод, который получает радиус шара и вычисляет объем шара. Реализовать передачу метода вычисления объема шара в другой метод в качестве параметра. Провести тестирование метода.
Текст программы, решения данной задачи, следующий.
Почему мы не можем просто обратиться к статическому методу static double SphereVolume и не вернуть просто объем шара - return 4.0/3.0*Math.PI*radius*radius*radius;?Java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
// Ссылка на статический метод, вычисляющий объем шара // 1. Функциональный интерфейс, определяющий метод, который получает параметром // число типа double и возвращает результат типа double interface ICalcFigure { double Volume(double radius); } // 2. Класс, в котором определен статический метод вычисления объема шара class CalcVolume { static double SphereVolume(double radius) { // повернути об'єм кулі return 4.0/3.0*Math.PI*radius*radius*radius; } } // 3. Класс, в котором определен метод, получающий ссылку на функциональный интерфейс class FigureOperation { double Volume(ICalcFigure ref, double radius) { return ref.Volume(radius); } } // 4. Класс, демонстрирущий использование ссылки на статический метод public class RefMethod { public static void main(String[] args) { // Вычислить объем шара // 1. Объявить экземпляр класса FigureOperation FigureOperation fo = new FigureOperation(); // 2. Вызвать метод Volume и передать ему ссылку на статический метод // Вычислить объем шара радиуса 5.0 double volume = fo.Volume(CalcVolume::SphereVolume, 5.0); // 3. Вывести результат System.out.println("volume = " + volume); } }
Запись от AlexProgramm размещена 18.09.2023 в 11:25
Обновил(-а) AlexProgramm 18.09.2023 в 11:29 -
Какое вообще тело будет у метода test?
короткая записьJava 1
IntPredicate divideBy13 = a -> a % 13 == 0;
Java 1 2 3 4 5 6
IntPredicate divideBy13 = new IntPredicate() { @Override public boolean test(int a) { return a % 13 == 0; } };
Запись от vcrop размещена 18.09.2023 в 13:31 -
или
Java 1
Delim13 v3 = a -> divideBy13.test(a);
Сюда https://docs.oracle.com/javase... ences.html,Java 1
Delim13 v3 = divideBy13::test;
там табличка на четыре варианта, и снизу примеры.
И стандартные интерфейсы
https://docs.oracle.com/javase... mmary.htmlЗапись от vcrop размещена 18.09.2023 в 13:38 -
Цитата:или
Java 1
Delim13 v3 = a -> divideBy13.test(a);
Сюда https://docs.oracle.com/javase... ences.html,Java 1
Delim13 v3 = divideBy13::test;
там табличка на четыре варианта, и снизу примеры.
И стандартные интерфейсы
https://docs.oracle.com/javase... mmary.htmlЗапись от AlexProgramm размещена 20.09.2023 в 23:12 -
Цитата:
Первое записано через лямбда-выражение?
Второе через анонимный класс?
Тело метода test вот - a % 13 == 0Запись от AlexProgramm размещена 22.09.2023 в 11:42
Обновил(-а) AlexProgramm 22.09.2023 в 14:08 -
Цитата:или
Java 1
Delim13 v3 = a -> divideBy13.test(a);
Сюда https://docs.oracle.com/javase... ences.html,Java 1
Delim13 v3 = divideBy13::test;
там табличка на четыре варианта, и снизу примеры.
И стандартные интерфейсы
https://docs.oracle.com/javase... mmary.html
С этим тоже все понятно(по табличке) :
Передаем ссылку на статический метод ИмяКласса:: имяСтатическогоМетода
Передаем ссылку на не статический метод используя существующий объект имяПеременнойСОбъектом:: имяМетода
Передаем ссылку на не статический метод используя класс, в котором реализован такой метод ИмяКласса:: имяМетода
Передаем ссылку на конструктор ИмяКласса::newЗапись от AlexProgramm размещена 22.09.2023 в 11:49 -
Давай, я тебе такую историю посоветую, чтобы ты потом написал - "изученный материал":
https://stepik.org/course/91497/promo#toc
Курс был от Intellij.Запись от vcrop размещена Вчера в 12:03
Обновил(-а) vcrop Вчера в 12:04