Лямбды в массы

Лямбды в массы (о нововведениях в 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
Метки:
java8, java8 oracle дождались, lambdas
Похожие публикации