【问题标题】:lambda expression code is showing compilation error in Intelljlambda 表达式代码在 Intellij 中显示编译错误
【发布时间】:2016-10-14 15:34:33
【问题描述】:

此代码是从参考中复制的,但它在 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、类型注释等。

【问题讨论】:

  • 你使用的是原始类型,它应该是Stream&lt;Locale&gt; locales
  • 或者根本不将流存储在局部变量中。这样做没有任何好处,它只会打开意外使用 Stream 两次的可能性。此外,如果您有一个数组而不是 varargs,则更喜欢 Arrays.stream 而不是 Stream.ofMap&lt;String, Set&lt;String&gt;&gt; countryToLanguages = Arrays.stream(Locale.getAvailableLocales()).collect( groupingBy(l -&gt; l.getDisplayCountry(), mapping(l -&gt; l.getDisplayLanguage(), toSet())));
  • 顺便说一句,你可以使用方法引用,那么,没有变量l担心它的类型:Map&lt;String, Set&lt;String&gt;&gt; countryToLanguages = Arrays.stream( Locale.getAvailableLocales()) .collect( groupingBy(Locale::getDisplayCountry, mapping(Locale::getDisplayLanguage, toSet())));
  • @AlexisC。是的,我写了这部分,忘记指定流类型。

标签: intellij-idea lambda compilation java-8


【解决方案1】:

在 intellij 中,您还需要为每个模块设置语言级别 (8)。 项目结构 -> 模块 -> 选择模块 -> 源 -> 语言级别 = 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多