【问题标题】:Lambda expressions are not supported at this language level [duplicate]此语言级别不支持 Lambda 表达式 [重复]
【发布时间】: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。

标签: java intellij-idea apache-spark


【解决方案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 也许你也应该用这个要求更新你的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-15
  • 2014-08-09
  • 2015-05-26
  • 2017-06-08
  • 2016-05-17
  • 2015-04-29
相关资源
最近更新 更多