Добавил:
ПОИТ 2016-2020 Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Пацей 4 сем / Лекции / СТПI_2_ООП

.pdf
Скачиваний:
70
Добавлен:
29.04.2018
Размер:
15.18 Mб
Скачать

Через лямбды

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);

Получаем массив кнопок

Соседние файлы в папке Лекции