此语言级别不支持 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) -> 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