lambda表达式代码显示Intellj中的编译错误

时间:2016-10-14 15:34:34

标签: intellij-idea lambda compilation java-8

此代码是从引用中复制的,但它显示了Intellj中的编译错误:

Stream locales = Stream.of(Locale.getAvailableLocales());
            Map<String, Set<String>> countryToLanguages = locales.collect(
                    groupingBy(l -> l.getDisplayCountry(),
                            mapping(l -> l.getDisplayLanguage(),
                                    toSet())));

编译器看到的对象名为“l”,而java对象不是语言环境;所以它无法理解方法l.getDisplayCountry()和l.getDisplayLanguage()。

Project SDK也是java 8,项目语言级别是8-lambdas,类型注释等。

1 个答案:

答案 0 :(得分:0)

在intellij中,您还需要为每个模块设置语言级别(8)。 项目结构 - &gt;模块 - &gt;选择模块 - &gt;来源 - &gt;语言水平= 8

如果你想直接改变POM

首先添加属性

<properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
</properties>

second-添加插件

<plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.5.1</version>
    <configuration>
        <source>1.8</source>
        <target>1.8</target>
    </configuration>
</plugin>

得益于Anuj stop IntelliJ IDEA to switch java language level everytime the pom is reloaded (or change the default project language level)