Pull to refresh

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

Лямбды в массы (о нововведениях в 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
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.