用于简化匿名内部类的代码写法
格式:(被重写方法的形参列表)->{
被重写方法的方法体代码。
}
//Lambda表达式并不是能简化全部匿名内部类的写法,只能简化函数式接口的匿名内部类
函数式接口:是接口,有且只有一个抽象方法
public class Test1_Lambda {
public static void main(String[] args) {
// Animal dog = new Animal() {
// @Override
// public void run() {
// System.out.println("狗跑得快");
// }
// };
// dog.run();
//Lambda表达式并不是能简化全部匿名内部类的写法,只能简化函数式接口的匿名内部类
//函数式接口是接口,有且只有一个抽象方法
//错误
// Animal dog = ()->{System.out.println("狗跑得快");};
// dog.run();
// Swimming s = new Swimming() {
// @Override
// public void swim() {
// System.out.println("学生快乐的游泳");
// }
// };
Swimming s = () ->{System.out.println("学生快乐的游泳");};
s.swim();
}
}
abstract class Animal{
abstract public void run();
}
interface Swimming{
void swim();
}
Lambda表达式省略规则:
-
参数类型可以省略不写
-
如果只有一个参数,参数类型可以省略,同时()也可以省略
-
如果Lanbda表达式中方法体只有一行代码,可以省略大括号不写,同时要省略分号!
此时,如果这行代码是return 语句,也必须去掉return
第一种
Arrays.setAll(prices, new IntToDoubleFunction() {
@Override
//value会去数组的索引
public double applyAsDouble(int value)
return prices[value]*0.8;
}
});
第二种
Arrays.setAll(prices,(int value)->{return prices[value]*0.8;});
第三种
Arrays.setAll(prices,(value)->{return prices[value]*0.8;});
第四种
Arrays.setAll(prices,value->{return prices[value]*0.8;});
第五种
Arrays.setAll(prices,value-> prices[value]*0.8);