Распечатка некоторых полей объектов фильтруемого потока - PullRequest
0 голосов
/ 02 января 2019

Предположим, что есть класс Fox, у которого есть имя, цвет и возраст. Давайте предположим, что у меня есть список лис, и я хочу напечатать имена этих лис, цвета которых зеленые. Я хочу использовать потоки для этого.

Поля:

  • имя: приватная строка
  • цвет: приватная строка
  • возраст: частное целое

Я написал следующий код для фильтрации и Sysout:

foxes.stream().filter(fox -> fox.getColor().equals("green"))
     .forEach(fox -> System.out::println (fox.getName()));

Однако в моем коде есть некоторые синтаксические проблемы.

В чем проблема? Как мне с этим разобраться?

Ответы [ 3 ]

0 голосов
/ 02 января 2019

Просто используйте:

foxes.stream().filter(fox -> fox.getColor().equals("green"))
              .forEach(fox -> System.out.println(fox.getName()));

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

0 голосов
/ 02 января 2019

Вы можете попробовать:

foxes.stream().filter(this::isColorGreen).map(Fox::getName).forEach(System.out::println);


public boolean isColorGreen(Fox fox) {
    return fox.getColor().equals("green");
}
0 голосов
/ 02 января 2019

Нельзя объединять ссылки на методы с лямбдами, просто используйте одну:

foxes.stream()
     .filter(fox -> fox.getColor().equals("green"))
     .forEach(fox -> System.out.println(fox.getName()));

или другой:

foxes.stream()
     .filter(fox -> fox.getColor().equals("green"))
     .map(Fox::getName) // required in order to use method reference in the following terminal operation
     .forEach(System.out::println);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...