Пацей 4 сем / Лекции / СТПI_2_ООП
.pdfЧерез лямбды
void function (){
String [] s = new String [] {"asyuuy", "dfg", "hjkl"};
Arrays.sort(s,(String firstStr, String secondStr)-> Integer.compare(firstStr.length(),secondStr.length()));
for(String i: s ){
Log.i("info",i);
}
параметры, стрелка-> и выражение
button.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View view) { Log.i("info","Push button");
}
});
Лямбда
button.setOnClickListener(view -> Log.i("info","Push button"));
►Блок
(String firstStr, String secondStr) -> {
if (firstStr.length() < secondStr.length()) return -1; else if (firstStr.length() > secondStr.length()) return 1; else return 0;
}
►Нельзя не возвращать тип из одной из веток кода
►Без параметров
()->{ for (int i = 0; i < 10; i++){ Log.i(i);} }
►Вывод типов параметров
Comparator<String> comp
=(firstStr, secondStr)
//(String firstStr, String secondStr)
-> Integer.compare(firstStr.length(),secondStr.length());
►Добавление аннотации или final к параметрам
(final String var) -> ...
(@NonNull String var) -> ...
►не указываем тип результата лямбдавыражения из контекста
interface CalculatorOperation { int operation(int a, int b);
}
public class HelloW {
CalculatorOperation addition = (int a, int b) -> a + b; CalculatorOperation subtraction = (a, b) -> a - b;
CalculatorOperation multiplication = (int a, int b) -> { return a * b;
CalculatorOperation division = (int a, int b) -> a / b;
...
Ссылки на метод
помогают указывать на методы по их именам
[
button.setOnAction(event -> System.out.println(event));
|
эквивалентен лямбда- |
|
button.setOnAction(System.out::println); |
выражению |
|
x -> System.out.println(x) |
||
|
String []s = new String [] {"aSyuuy", "asdfg", "hjkl"}; Arrays.sort(s, String::compareToIgnoreCase);
имени объекта или класса |
имя метода |
►Три варианта: |
ссылка на метод |
|
|
эквивалентна лямбда- |
|
object::instanceMethod |
выражению |
|
Math::pow |
||
|
||
Class::staticMethod |
(x, y) -> Math.pow(x, y) |
Class::instanceMethod
первый параметр становится целевым
объектом метода
String::compareToIgnoreCas
(x, y) -> x.compareToIgnoreCase(y)
можно захватить параметр this в ссылке на
метод ( или super)
this::equals |
x -> this.equals(x) |
Ссылки на конструктор
int[]::new x -> new int[x]
Button::new
ссылка на конструктор с одним параметром
На какой конструктор, зависит от контекста
►Назначение
Object[] buttons = stream.toArray();
Получаем массив объектов
Button[] buttons2 = stream.toArray(Button[]::new);
Получаем массив кнопок