Я не могу получить ForEach для потока, чтобы напечатать список - PullRequest
0 голосов
/ 25 мая 2019

Мне интересно, почему forEach не работает для моей программы. Я хочу напечатать каждый элемент из списка.

Ошибка: несовместимые типы: void не может быть преобразован в список .forEach (i -> System.out.println (i + ""));

List <Integer> evenNumList = Arrays.asList(valuesArray)
                                                .stream()
                                                .filter(x -> (x % 2 == 0))
                                                .forEach(i -> `System.out.println(i + " "));`

Я запутался, почему вышесказанное не работает, но работает следующее:

List <Integer> number = Arrays.asList(2,3,4,5);
        number.stream().map(x->(x*x)).forEach(y->System.out.println(y));

Ответы [ 2 ]

2 голосов
/ 25 мая 2019

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

Arrays.asList(valuesArray).stream().filter(x -> (x % 2 == 0)).forEach(i -> `System.out.println(i + " "));`

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

Изменить как вопрос был обновлен.

Код ниже работает, потому что;

List <Integer> number = Arrays.asList(2,3,4,5); number.stream().map(x->(x*x)).forEach(y->System.out.println(y));

Здесь, в первой строке, вы присваиваете значения в списке.

List <Integer> number = Arrays.asList(2,3,4,5);

Здесь, во второй строке, теперь, когда в списке уже есть значения, вы просто перебираете каждое из них и печатаете.

number.stream().map(x->(x*x)).forEach(y->System.out.println(y));
0 голосов
/ 25 мая 2019

Здесь:

List <Integer> evenNumList = ...

, а затем

  .forEach(i -> `System.out.println(i + " "));`

Вы хотите присвоить «результат» этой потоковой операции списку. forEach() просто повторяет ваш поток, что просто не то, что вы хотите. Просто иди:

..filter(x -> (x % 2 == 0)).collect(Collectors.asList());

Это соберет все предметы, которые вы хотите. Тогда потом , просто иди

System.out.println(evenNumList);

например!

И небольшое примечание: не добавляйте тип в переменную. Просто назовите это evenNumbers например.

...