Lambda的使用规则
1.什么是lambda,它能够干什么?
Lambda在一定程度上简化了之前函数式接口的实现代码
2.使用范围
首先,这个接口是一个函数式接口,即这个接口有且仅有一个方法。这种接口可以使用@FunctionalInterface注解做检查
3.lambda的结构
(参数列表)->{方法体};
4.lambda的六种情况
1)无参数,无返回值
@FunctionalInterface
public interface Text {
void get();
}
//在主方法中实现上面的接口
Test test = ()->{System.out.println("这就是lamdba");};
2)有参数,无返回值
@FunctionalInterface
public interface Test {
void get(String aaa);
}
//在主方法中实现上面的接口
Test test = (String name)->{System.out.println(name);};
//调用
test.get("风景");
3)如果遇到情况二,参数配型可以省略
@FunctionalInterface
public interface Test {
void get(String name,int age);
}
//在主方法中实现上面的接口
Test test = (name, age)->{System.out.println("我是"+name+"今年"+age);};
test.get("李四",12);
4)如果只有一个参数可以省略()
@FunctionalInterface
public interface Test {
void get(String name);
}
//在主方法中实现上面的接口
Test test = name->{System.out.println("我是"+name);};
test.get("李四");
5)如果方法实现只有一条执行语句{}可以省略
@FunctionalInterface
public interface Test {
void get(String name);
}
Test test = name->System.out.println("我是"+name);
//在主方法中实现上面的接口
test.get("李四");
6)如果方法实现只有一条执行语句,且这条语句时return时,如果想省略{}return必须不写,如果不省略,需要写return
@FunctionalInterface
public interface Test {
String get(String name);
}
//在主方法中实现上面的接口
Test test = name -> { return name;};
//或者
Test test = name -> name;
总结:
完整版
@FunctionalInterface
public interface Test {
String get(String name,int age);
}
//在主方法中实现上面的接口
Test test = (String name, int age) -> {
System.out.println("你好啊");
return name;
};
test.get("李四",18);
Lamdba的内置函数式接口
1.Consumer consumer
public static void main(String[] args) throws InterruptedException {
test(20,(Integer ppp) ->{
System.out.println("你猜一猜age为"+ppp);
});
}
public static void test(int age, Consumer<Integer> consumer){
consumer.accept(age);
}
2.Predicate predicate
public static void main(String[] args) throws InterruptedException {
List list = new ArrayList<>();
list.add(12);
list.add(13);
list.add(14);
list.add(15);
list.add(16);
List res = choose(list, (Integer age) -> {
if (age > 14) {
return true;
}
return false;
});
System.out.println(res);
}
// 模拟一个判断ages的方法
public static List choose(List<Integer> ages, Predicate<Integer> predicate){
List<Integer> res = new ArrayList<>();
for(int age: ages){
//如果满足predicate设定的条件{调用时设定},就把这个年龄放入结果集中
if (predicate.test(age)){
res.add(age);
}
}
return res;
}
3.Function<String,Integer> function
public static void main(String[] args) throws InterruptedException {
String name = "里斯";
int money = getMoney(name, x -> {
return (int)(Math.random()*100);
});
System.out.println(name+"有"+money+"元");
}
public static int getMoney(String name, Function<String,Integer> fUnction){
Integer money = function.apply(name);
return money;
}
4.这个不再举例,用法雷同
总结自尚硅谷宋红康老师的java基础视频