环境: 环境变量JAVA_HOME配置jdk1.8
idea配置支持lambda:
File -> Project Structure -> Modules -> Language level, 选择: 8-Lambdas, type annotations etc.
File -> Project Structure -> Project -> Project language level, 选择: 8-Lambdas, type annotations etc.
pom文件中对编译器的配置:
<build>
<finalName>spark.hadoop.study</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<showWarnings>true</showWarnings>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
核心是指定source为1.8, 否则编译会报如下错误:
Fatal error compiling: 无效的目标发行版
用junit写的测试代码:
package com.sogou.baike;
import org.junit.Test;
/**
* Created by denglinjie on 2017/9/6.
*/
public class LambdaTest {
//所需接口
interface MathOperation {
int operate(int a, int b);
}
@Test
public void testPlus() {
// 不用类型声明
MathOperation plus = (a, b) -> a + b;
System.out.println(plus.operate(1, 2));
}
@Test
public void testSub() {
// 类型声明, 没有大括号以及返回语句
MathOperation sub = (int a, int b) -> a - b;
System.out.println(sub.operate(2, 1));
}
@Test
public void testMulti() {
// 用大括号及返回语句
MathOperation multi = (int a, int b) -> {return a * b;};
System.out.println(multi.operate(1, 2));
}
}
大致理解:用lambda表达式构造方法实体,等价于实现了接口中的方法,最终lambda表达式的返回值就是接口的实现类