从Java中的内部循环访问外部循环变量

时间:2020-05-28 21:22:51

标签: java loops

我的列表包含列表字符定义,例如List<Character> listCharacter = new ArrayList<Character>();

字符类:

private List<Result> results;

结果类:

 private int id;

 private String name;

我试图像这样遍历listCharerer

listCharacter.forEach((characters) -> {

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

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

            });
        });

但是当我尝试这样做时,我得到 foreach不适用,Iterable类型不适用于参数((result)-> {})错误。我知道foreach循环不可能实现链循环。

我也知道我们可以像重复使用的问题解决方案那样使用消费者,但是后来我无法在内部循环内到达外部循环变量。消费者类只是使用它并对其进行处理,因此我不想使用它。

我该怎么办?我的意思是在不处理此类错误的情况下在内部循环内到达外部循环变量?

TLDR:我有2个列表对象。我正在遍历具有一个具有ID和名称的内部一个列表对象(结果)的外部一个(listCharacter)。如果ID匹配,该方法将返回。

2 个答案:

答案 0 :(得分:3)

我首先建议您避免调用自定义类Character,因为Java API已经使用了该类。您不必这样做,但可以避免在这里和那里造成混乱。考虑保留一些更有意义的内容并反映班级的工作。

还请注意,您无法从forEach返回结果。

您可以按以下步骤完成预期的结果:

source.stream()
      .map(Character::getResults)
      .flatMap(Collection::stream)
      .filter(s -> s.getId() == id)
      .findFirst().orElse(null);

答案 1 :(得分:0)

“结果”不是列表或任何其他迭代器,它只是“结果”类型的单个对象。因此,您根本无法对其进行迭代。确保getResults()实际上返回一个列表,而不是单个对象,然后可以对其进行迭代。

(还要注意,forEach()实际上不是循环。它是一个以lambda函数作为参数的函数调用。而且如前所述,您不能使用forEach()从lambda函数中收集某种结果,则必须使用map()。)