此语言级别不支持 Lambda 表达式 [重复]

Posted

技术标签:

【中文标题】此语言级别不支持 Lambda 表达式 [重复]【英文标题】:Lambda expressions are not supported at this language level [duplicate] 【发布时间】:2016-02-29 14:10:06 【问题描述】:

我有一个使用 Spark 的 Java 类。我需要从 JavaRDD 中过滤掉标头。这就是我想要的方式。

String first = data.first();
JavaRDD<String> filteredData = data.filter((String s) -> return !s.contains(first););

但是,这段代码data.filter((String s) -&gt; return !s.contains(first);) 无法编译。 IntelliJ IDE 说“此语言级别不支持 Lambda 表达式”。

【问题讨论】:

将您的项目语言级别更改为 8.0。 JDK 7 及更早版本中不存在 Lambda。 【参考方案1】:

您可以在 Java 7 上使用 lambda,但它有点复杂——您必须使用类似 Retrolambda 的东西。

你也可以在没有 lambda 的情况下做同样的事情。 Lambda 可以很容易地通过匿名类来表示,但是它更加冗长。

final String first = data.first();
JavaRDD<String> filteredData = data.filter(new Function<String, Boolean>() 
  @Override public Boolean call(String s) 
    return !s.contains(first);
  
);

【讨论】:

我可以用 Java 7 做类似的事情吗? @KlausosKlausos 我更新了答案。 如果我不想在我的项目中集成任何库怎么办?我可以使用 Java 7 的工具过滤掉标头吗? @KlausosKlausos 回答已更新 @KlausosKlausos 也许你也应该用这个要求更新你的问题。

以上是关于此语言级别不支持 Lambda 表达式 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用带有 ViewPager 错误的 GridView 创建的应用程序:-source 1.7 中不支持 lambda 表达式(使用 -source 8 或更高版本 [重复]

尝试使用此语言级别不支持的资源

此语言级别不支持 try-with-resources - Android

lambda表达式

此语言级别不支持 intellij 功能 (...)。我无法编译

Lambda表达式多表连接的左连