Лямбды в массы (о нововведениях в java 8)
Лямбды — одно из самых значимых нововведение в java 8.
Для начала разберемся с итераторами.
При использовании внешних итераторов программист учитывает общее количество записей и проходит по ним. У вас есть итератор и шаг итерации.
Внутренние итераторы управляют итерациями в фоновом режиме. Когда вы передаете объект функции методу, выполняемому над списком, это внутренний итератор.
Возьмем для примера список
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
1. Пробежимся по списку и выведем его на экран используя цикл for
System.out.println("Using foreach loop (external iterator)")
for (int i = 0; i < numbers.size(); i++) {
System.out.println(numbers.get(i));
}
2. используя for each
System.out.println("Using lambdas <i><b>for each</b></i> (external iterator)");
for(int e:numbers){
System.out.println(e);
}
3. Для той же задачи используем интерфейс Consumer
numbers.forEach(new Consumer<Integer>() {
@Override
public void accept(Integer value) {
System.out.println(value);
}
});
4. Используя лямбды
numbers.forEach(n -> System.out.println(n));
5. И попробуем распараллелить наш вывод
System.out.println("Using lambdas for each (external iterator) + parallel");
people.parallelStream().forEach(p -> System.out.println(p));
6. println — метод класса System.out. Тогда можем заменить выражение в скобках на более красивое
System.out.println("Using for each method references (internal iterator) - can be executed in parallel");
numbers.forEach(System.out::println);
7. Подсчитаем сумму элементов используя reduce
System.out.println(
numbers.stream()
.reduce(0,(total, e) -> Integer.sum(total, e)));
Сделаем “красиво”
System.out.println(
numbers.stream()
.reduce(0,Integer::sum));
8. Выведем список в строку
System.out.println(
numbers.stream()
.map(String::valueOf)
.reduce("",(carry,str) -> carry.concat(str)));
Добавим красоты
System.out.println(
numbers.stream()
.map(String::valueOf)
.reduce("", String::concat));
Заключение
Лямбда-выражения — одно из самых заметных нововведений Java версии 8.
И в этом смысле lambda-выражения способны существенно облегчить жизнь разработчику.
Ссылки на источники
1. Get a Taste of Lambdas and Get Addicted to Streams by Venkat Subramaniam — www.youtube.com/watch?v=1OpAgZvYXLQ