在lambda中使用的循环变量

时间:2017-05-12 08:52:31

标签: java lambda java-8 closures java-stream

Set<Malfunction> malfunctions= ...
for (final String guideword : guidewords) {
    Malfunction malf = malfunctions.stream()
            .filter(m -> m.getGuideword().equals(guideword))
            .collect(Collectors.toList())
            .get(0);

当我避免使用guideword变量,但使用硬编码值时,例如“some_reasonable_string”一切正常。

如果我使用循环中的guideword,则会出现问题:发生故障中有一个Set<Hazard>并且应该填写 malf

1 个答案:

答案 0 :(得分:2)

您无法从lambda访问循环变量,因为它不是最终的。一种解决方案是在循环中获取它的最终副本。

    for (String guideword : guidewords) {
        // Add this.
        final String thisGuideWord = guideword;
        Malfunction malf = malfunctions.stream().filter(m ->
                m.getGuideword().equals(thisGuideWord))
                .collect(Collectors.toList()).get(0);

然而,正如GhostCat所指出的,这里可能存在一个更基本的问题。