Это лучший вариант для вложенных циклов IntStream и в чем ошибка? - PullRequest
0 голосов
/ 26 августа 2018

Я хочу создать тройную вложенную итерацию чисел от 0 до 500 с шагом 10.

Я попробовал следующее, и я получил ошибку в круглых скобках. Подскажите пожалуйста?

Спасибо.

public class App {
    public static void main(String[] args) {

        IntStream.rangeClosed(0, 500).filter(a -> a % 10 == 0).forEach( a ->
                IntStream.rangeClosed(0, 500).filter(b -> b % 10 == 0).forEach( b ->
                        IntStream.rangeClosed(0, 500).filter(c -> c % 10 == 0).forEach( c->
                                System.out.println(a + ", " + b + ", " + c);
                        );
                );
        );
    }
}

Ответы [ 2 ]

0 голосов
/ 26 августа 2018

Мое предложение:

    IntStream.rangeClosed(0, 50)
            .forEach(a -> IntStream.rangeClosed(0, 50)
                    .forEach(b -> IntStream.rangeClosed(0, 50)
                            .forEach(c -> System.out.format("%3d, %3d, %3d%n",
                                    a * 10, b * 10, c * 10))));

Выдержка из вывода:

  0,   0,   0
  0,   0,  10
  0,   0,  20
  0,   0,  30
  0,   0,  40

…
500, 500, 490
500, 500, 500

limit(51) in Ответ Эрана выглядит немного забавно.

Что пошло не так в вашем коде? Как сказал Эран в комментарии , у вас не может быть точки с запятой ; после вызова метода внутри вашего потока (если он не окружен фигурными скобками) ). Просто удалите первые три точки с запятой, и ваш код заработает.

0 голосов
/ 26 августа 2018

Вместо генерации 501 элемента в каждом потоке и последующей фильтрации всех элементов, не делимых на 10, вы можете сгенерировать IntStream s, которые содержат кратные 10:

IntStream.iterate(0, i->i+10).limit(51).forEach( a ->
            IntStream.iterate(0, i->i+10).limit(51).forEach( b ->
                    IntStream.iterate(0, i->i+10).limit(51).forEach( c->
                            System.out.println(a + ", " + b + ", " + c)
                    )
            )
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...