«1. Обзор

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

Мы можем взглянуть на эту статью, чтобы наверстать упущенное в основах Java 8 Stream.

2. Обычная логика if/else внутри forEach()

Прежде всего, давайте создадим список целых чисел, а затем используем обычную логику if/else в методе целочисленного потока forEach():

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

ints.stream()
    .forEach(i -> {
        if (i.intValue() % 2 == 0) {
            Assert.assertTrue(i.intValue() % 2 == 0);
        } else {
            Assert.assertTrue(i.intValue() % 2 != 0);
        }
    });

~ ~~ Наш метод forEach содержит логику if-else, которая проверяет, является ли Integer четным или нечетным числом, используя оператор модуля Java.

3. Логика if/else с filter()

Во-вторых, давайте рассмотрим более элегантную реализацию с использованием метода Stream filter():

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 -> Assert.assertTrue(i.intValue() % 2 == 0));
oddIntegers.forEach(i -> Assert.assertTrue(i.intValue() % 2 != 0));

Выше мы реализовали логику if/else с помощью Stream filter() для разделения списка целых чисел на два потока, один для четных целых чисел, а другой для нечетных.

4. Заключение

В этой быстрой статье мы рассмотрели, как создать поток Java 8 и как реализовать логику if/else с помощью метода forEach().

Кроме того, мы узнали, как использовать метод Stream filter для достижения аналогичного результата более элегантным способом.

Наконец, полный исходный код, используемый в этом руководстве, доступен на Github.