Доступ к внешней l oop переменной изнутри l oop in Java - PullRequest
0 голосов
/ 29 мая 2020

Мой список состоит из определения символа списка, например List<Character> listCharacter = new ArrayList<Character>();

Класс символа:

private List<Result> results;

Класс результата:

 private int id;

 private String name;

Я пытаюсь перебрать listCharacter как

listCharacter.forEach((characters) -> {

            characters.getResults().forEach((result) -> {

                if (result.getId() == id) {
                    return result;
                }

            });
        });

Но когда я пытаюсь это сделать, я получил foreach не применимо, тип Iterable не применим для аргументов ((результат) -> {}) ошибка. Я знаю, что цепочка l oop невозможна с foreach l oop.

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

Как я могу это сделать? Я имею в виду достижение внешней переменной l oop внутри внутренней l oop без Что делать с такими ошибками?

TL; DR: у меня есть 2 объекта списка. Я повторяю внешний (listCharacter), у которого есть внутренний объект списка (результат), у которого есть идентификатор и имя. Если идентификатор совпадает, метод вернется. Вот и все.

Ответы [ 2 ]

3 голосов
/ 29 мая 2020

Во-первых, я бы посоветовал вам избегать вызова специального класса Character, поскольку он уже используется API Java. вам не обязательно, но это позволит избежать путаницы здесь и там. Подумайте о том, чтобы перейти к чему-то более значимому и отражающему то, что делает класс.

Также обратите внимание, что вы не можете вернуть результат из forEach.

Вы можете достичь sh желаемого результата следующим образом :

source.stream()
      .map(Character::getResults)
      .flatMap(Collection::stream)
      .filter(s -> s.getId() == id)
      .findFirst().orElse(null);
0 голосов
/ 29 мая 2020

«results» - это не список или какой-либо другой итератор, это просто отдельный объект типа «Result». Таким образом, вы вообще не можете перебирать его. Убедитесь, что getResults () действительно возвращает список, а не отдельный объект, и затем вы можете перебирать его.

(Также обратите внимание, что forEach () на самом деле не al oop. Это вызов функции с лямбда-функция в качестве параметра. И, как упоминалось ранее, вы не можете использовать forEach () для сбора какого-либо результата от лямбда-функции, для этого вам придется использовать map ().)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...