Lambda 表达式的基础语法,Java8中引入了一个新的操作符 "->" 该操作符称为箭头操作符或 Lambda 操作符。
- 箭头操作符将 Lambda 表达式拆分为俩部分。
- 左侧: Lambda 表达式的参数列表
- 右侧: Lambda 表达式中所需要执行的功能 , 既 Lambda 体
接下来是Lambda 基础语法的使用
语法1:无参数,无返回值
//语法一:无参数,无返回值 ()->System.out.println("hello Lambda..");
@Test
public void test1() {
final int num = 0;
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("hello word" + num);
}
};
runnable.run();
System.out.println("-------Lambda 使用-------");
Runnable runnable1 = () -> System.out.println("hello lambda ...");
runnable1.run();
}
语法二:有一个参数,并且无返回值
//语法格式二: 有一个参数,并且无返回值
// (x)->System.out.println(x);
//注意有一个参数,参数小括号可以省略不写
// x->System.out.println(x);
@Test
public void test2() {
Consumer<String> consumer = (x) -> System.out.println(x);
consumer.accept("这是一个信息");
}
语法三:有俩个以上参数,有返回值,并且 Lambda 体重有多条语句
//语法格式三: 有俩个以上参数,有返回值,并且 Lambda 体重有多条语句
@Test
public void test3() {
Comparator<Integer> comparator = (x, y) -> {
System.out.println("函数式接口");
return Integer.compare(x, y);
};
//这俩个语句是一致的
//若Lambda 体中只有一条语句,return 和 大括号都可以省略不写
Comparator<Integer> con = (x, y) -> Integer.compare(x, y);
}
语法四:Lambda 表达式的参数列表的数据类型可以省略不写 , 因为 JVM 编译器 可以通过上下文,推断出数据类型,既 类型推断
//语法格式四:Lambda 表达式的参数列表的数据类型可以省略不写 , 因为 JVM 编译器 可以通过上下文,推断出数据类型,既 类型推断
@Test
public void test4() {
//类型推断我们以前都用过 如下
//String[] strings = {"aa", "bb", "cc"};
//如果下面分开写 就推断不出里面是什么类型,
//String[] strings;
//strings = {"aa", "bb", "cc"};
//jdk 1.7 以后 ArrayList<> 后面是从上下文推断出数据库类型的
List<String> list = new ArrayList<>();
//使用show 方法接口无需填入参数的数据类型 可以通过上下文推断
show(new HashMap<>());
}
public void show(Map<String, Integer> maps) {}
拓展
/**
* 函数式接口 在 Java 中,Marker(标记)类型的接口是一种没有方法或属性声明的接口,简单地说,marker 接口是空接口。相似地,函数式接口是只包含一个抽象方法声明的接口
*
* @author Administrator
* @version 1.0
* @FunctionalInterface 用于判断该接口是否为函数式接口
* @date 2019/11/6 15:13
*/
@FunctionalInterface
public interface MyFunction<T> {
public T getVal(T t);
}
接口测试如下
//需求:对一个数进行运算
@Test
public void test5(){
MyFunction<Integer> myFunction = x -> x* x;
Integer val = myFunction.getVal(100);
System.out.println(val);
MyFunction<Integer> myFunction1 = x -> x+ x;
System.out.println(myFunction1.getVal(123 ));
}
结果如下