Введение в выражение -Lambda Функциональное программирование

Как объектно-ориентированный язык программирования Java, если они запрограммированы в соответствии с типом программирования команд разделить (императивное программирование). Общая парадигма логического программирования, а также программирование (логическое программирование), функциональное программирование (функциональное программирование).

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

Что такое функциональное программирование? Ответ прост: все это математическая функция. Функциональные языки программирования могут иметь объекты, но эти объекты, как правило, постоянно - либо параметры функции, функция возвращает значение к тому, что есть. Существует не функциональный язык программирования для / следующего цикла, так как логика означает, что есть изменение состояния. Альтернативно фаза, эта логика цикла функциональный язык программирования является рекурсивным, функция как передача параметров режима выполнения.

Лямбда  - выражения

Java 8 Самых большое изменение является введение лямбды (Lambda является греческой буквой λ английского названия) выражение - компактное поведение способа передачи.

Лямбда-выражения вида

Синтаксис списка параметров лямбда-выражения, стрелка -> и функция состава тела. Тело может быть либо выражение функции, или может быть блоком операторов.

Выражение: выражение будет выполнено, а затем возвращает результат.

Блок операторов: оператор оператор в блоке будет выполняться последовательно, как метод заявления.

Абонент возвращает управление на заявление анонимного метода. перерыв и продолжить можно использовать только в цикле.

Если тело функции имеет возвращаемое значение, функция каждого пути внутри тела должна возвращать значение.

Функция тела для малых лямбда-выражений, он исключает возвращения ключевого слова, что делает синтаксис более кратким. Вот некоторые лямбда-выражения:

(Целое х, у INT) -> х + у () -> 42

(String s) -> {System.out.println (s); }

Получение первого лямбда-выражения X и у обоих параметров формирования и возвращает их сумму, лямбда-выражение не получает второй параметр возвращает целое число «42»; выражение третьего лямбда является строкой и выводится на консоль, он не возвращает значение.

общие приложения

Альтернативные анонимные внутренние классы

Там нет сомнений в том, лямбда-выражения наиболее часто используемые приложения является альтернативой анонимный внутренний класс, реализовать Runnable является классическим примером анонимного внутреннего класса. Выражение функции лямбды достаточно сильно, с () -> вы можете заменить весь анонимный внутренний класс! Посмотрите на код:

Если вы используете анонимный внутренний класс:

@Test
public void oldRunable() {
new Thread(new Runnable() { @Override
public void run() {
System.out.println("The old runable now is using!");
}
}).start();
}

А если использовать лямбда-выражение:

@Test
public void runable() {
new Thread(() ‐> System.out.println("It's a lambda function!")).start();
}

Окончательный вывод:

The old runable now is using!
 It's a lambda function!

Разве не достаточно сильны, чтобы страшно? Это не просто страшно? Не ясно, и целенаправленное страшный? это

Бабай лямбда-выражения, с минимальным кодом завершения перед классом, что нужно сделать!

В коллекции с помощью лямбда-выражений итерацию

Классы коллекций Java ежедневно развитие часто используется, даже сказал, что нет Java-код не используется для класса коллекции. , , Наиболее распространенная операция является итерация коллекции пройденной. Смотрите сравнение:

@Test
public void iterTest() {
List<String> languages = Arrays.asList("java","scala","python");
//before java8
for(String each:languages) { System.out.println(each);
}
//after java8
languages.forEach(x ‐> System.out.println(x)); languages.forEach(System.out::println);
}

Если вы знакомы студенты, конечно, Scala не чужд Foreach. Он может перебирать все объекты в коллекции, и

лямбда-выражение в него.

languages.forEach(System.out::println);

Эта строка выглядит как C ++ области видимости внутри редакции здесь также возможно.

Реализация карта с лямбда-выражения

Упоминание о функциональном программировании, ссылка на лямбда-выражения, как мы можем не упомянуть карту. Да, безусловно, поддерживаем java8. См Пример кода:

@Test
public void mapTest() {
List<Double> cost = Arrays.asList(10.0, 20.0,30.0); cost.stream().map(x ‐> x + x*0.05).forEach(x ‐>
System.out.println(x));
}

Окончательный вывод:

10.5
21.0
31.5

Функцию карты можно сказать, что самое важное функциональное программирование является способом пойти. Действие на карте объект превращается в другой. В нашем примере, метод карты стоимость через 0,05-кратное увеличение размера и мощности.

С лямбда-выражения для достижения карты и уменьшить

Как уже упоминалось в карте, как мы можем не упомянуть уменьшить. уменьшить карту в качестве одного из наиболее важных и функционального программирования в нескольких направлениях. Действие карты должно стать объектом к другому, и все значения уменьшают внедрение засасывается в один, см:

@Test
public void mapReduceTest() {
List<Double> cost = Arrays.asList(10.0, 20.0,30.0);
double allCost = cost.stream().map(x ‐> x+x*0.05).reduce((sum,x)
‐> sum + x).get();
System.out.println(allCost);
}

Конечный результат:

63.0

Если мы делаем это дело с циклом:

@Test
public void sumTest() {
List<Double> cost = Arrays.asList(10.0, 20.0,30.0); double sum = 0;
for(double each:cost) { each += each * 0.05; sum += each;
}
System.out.println(sum);
}

Я считаю, что формулировка с картой + уменьшить + лямбда-выражения выше, чем на один уровень.

работа фильтра

Мы также работаем фильтр часто. Когда набор операций, часто нужно быть отфильтрованы из оригинальной коллекции части элемента.

@Test
public void filterTest() {
List<Double> cost = Arrays.asList(10.0, 20.0,30.0,40.0); List<Double> filteredCost = cost.stream().filter(x ‐> x >
25.0).collect(Collectors.toList()); filteredCost.forEach(x ‐> System.out.println(x));
}

Конечный результат:

30.0
40.0
Опубликовано 682 оригинальные статьи · вона похвала 1391 · Просмотров 1,71 млн +

рекомендация

отblog.csdn.net/itcast_cn/article/details/104773758