Реализовать логику if/else в выражении потока java 8

Java

Введение

В потоковой обработке мы обычно сталкиваемся с суждением if/else.Как мы справляемся с такой проблемой?

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

Далее мы рассмотрим конкретный пример.

традиционное письмо

Предположим, у нас есть список от 1 до 10, и мы хотим выбрать нечетные и четные числа соответственно.Традиционно мы использовали бы это:

    public void inForEach(){
        List<Integer> ints = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

        ints.stream()
                .forEach(i -> {
                    if (i.intValue() % 2 == 0) {
                        System.out.println("i is even");
                    } else {
                        System.out.println("i is old");
                    }
                });
    }

В приведенном выше примере мы поместили логику if/else в forEach, хотя это не проблема, но код сильно раздут.

Посмотрим, как его переписать.

использовать фильтр

Мы можем переписать логику if/else в два фильтра:

List<Integer> ints = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

        Stream<Integer> evenIntegers = ints.stream()
                .filter(i -> i.intValue() % 2 == 0);
        Stream<Integer> oddIntegers = ints.stream()
                .filter(i -> i.intValue() % 2 != 0);

С этими двумя фильтрами используйте для каждого в потоке после фильтра:

        evenIntegers.forEach(i -> System.out.println("i is even"));
        oddIntegers.forEach(i -> System.out.println("i is old"));

Как, код очень лаконичен и понятен.

Суммировать

Лямбда-выражения должны быть максимально краткими, и мы можем использовать потоковые фильтры для замены бизнес-логики if/else.

Примеры этой статьиGitHub.com/Dadean2009/приходите…

Добро пожаловать, обратите внимание на мой публичный номер: вас ждут самые интересные вещи о программе! Для получения дополнительной информации, пожалуйста, посетитеwww.flydean.com