前言
lambda 表达式 是:允许你用表达式来代替接口的一种写法 ,
一、lambda怎么用
用在各种接口中 , 比较常见的有比如创建堆时候,提供的比较器,就可以用lambda表达式来代替 , 比如在多线程的时候, 也可以用lambda来简化表达
要想说明lambda 表达式具体用处 ,就得说明接口 ,而在接口中 有一种接口被称为函数式接口 ,
函数式接口 : 一个接口中只有一个抽象方法 . 如果在一个接口上面声明@FunctionalInterface 注解,那么编译器就会按照函数式接口的定义来要求该接口.
lambda的语法
(形参列表(可以不写)) -> 方法体
例如
x -> 2 * x
表示接受一个参数类型 ,返回其2倍的值
参数的类型 只有一个的时候 可以省略 ,还可以省略参数的括号
(int x, int y) -> x * y
表示接受俩个int类型的参数 , 返回他们的乘积
类型不可以单独省略,除非一起省略!
(String s) -> System.out.print(s)
表示接受一个String类型的值, 结果打印一条输出语句
可以省略return
lambda中不能作用范围相同的形参
lambda可用于foreach打印
lambda的具体示范
函数式接口示范
interface NoParameterNoReturn {
//注意:只能有一个抽象方法
void test();
/* static void test2() {
}
default void test3() {
}*/
}
public static void main1(String[] args) {
//函数式接口
NoParameterNoReturn noParameterNoReturn = new NoParameterNoReturn() {
@Override
public void test() {
System.out.println("hello");
}
};
noParameterNoReturn.test();
}
运行结果
lambda简化后写法
//无返回值一个参数
@FunctionalInterface
interface OneParameterNoReturn {
void test(int a);
}
public static void main(String[] args) {
//参数的类型 只有一个的时候 可以省略 ,还可以省略参数的括号
OneParameterNoReturn oneParameterNoReturn = x-> System.out.println(x+10);
oneParameterNoReturn.test(19);
//类型不可以单独省略,除非一起省略!
MoreParameterNoReturn moreParameterNoReturn = (x,y)-> System.out.println(x+y);
moreParameterNoReturn.test(10,20);
}
运行结果
lambda省略return
interface MoreParameterReturn {
int test(int a,int b);
}
public static void main(String[] args) {
//可以省略return
MoreParameterReturn moreParameterReturn = (x,y) -> x*y;
ret = moreParameterReturn.test(10,20);
System.out.println(ret);
}
运行结果
用于foreach打印
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("hello");
list.add("this");
list.add("day");
/*list.forEach(new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
});*/
list.forEach(s -> System.out.println(s));
System.out.println("=====");
/*list.sort(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
});*/
list.sort(((o1, o2) -> {return o1.compareTo(o2);}));
list.forEach(s -> System.out.println(s));
}