1.7Lambda表达式
1.概念
lambda表达式可以看做是一个Object(匿名内部类),它的目标类型为函数式接口(只有一个未实现的方法的抽象类/接口)
2.语法
(1)参数、箭头、代码段
()-> {}
(2)注意事项
- 参数
- (x,y):两个及两个以上参数必须要有()
- x:一个参数可以不用()
- ():代表没有入参
- 代码段
- 如果只有一行代码可以不用{}
- 有返回值必须要加{}
- 多行代码必须要加{}
3.使用
(1)变量隐蔽
①lambda表达式和外部包围块(第一层包围块)用的是同一个变量域
②lambda表达式只能使用外部包围块不变的变量(final修饰或没有修改的变量)
(2)this指代:表达式中的this为创建这个表达式的外部包围块的this
(3)填充函数式接口
4.函数式接口
(1)概念
一个接口/抽象类,只有一个未实现的方法,那么这个接口可以被称为函数式接口
(2)四大内置函数式接口
①Predicate<T>:断言型接口(boolean test(T t))
package learn01;
import java.util.function.Predicate;
/**
* @author zhangshiqin
* @date 2022/1/17 - 15:09
* @description:
*/
public class FunctionInterface {
//1.Predicate<T>
public static boolean test(String args, Predicate<String> predicate){
return predicate.test(args);
}
public static void main(String[] args) {
//1.断言型函数式接口 a = "money"
System.out.println(FunctionInterface.test("money", a -> a.endsWith("y")));
}
}
②Consumer<T>:消费型函数式接口( void accept(T t) )
package learn01;
import java.util.function.Consumer;
import java.util.function.Predicate;
/**
* @author zhangshiqin
* @date 2022/1/17 - 15:09
* @description:
*/
public class FunctionInterface {
//2.Consumer<T>
public static void accept(String args, Consumer<String> consumer){
consumer.accept(args);
}
public static void main(String[] args) {
FunctionInterface.accept("James",a->{
System.out.println(a);
});
}
}
③Supplier<T>:供给型接口(T get())
package learn01;
import java.util.function.Consumer;
import java.util.function.Predicate;
import java.util.function.Supplier;
/**
* @author zhangshiqin
* @date 2022/1/17 - 15:09
* @description:
*/
public class FunctionInterface {
//3.Supplier<T>
public static <T> T get(String args, Supplier<T> supplier){
return supplier.get();
}
public static void main(String[] args) {
System.out.println(FunctionInterface.get("abc", () -> 123));
}
}
④Function<T,R>:函数型接口( R apply(T t) )
package learn01;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;
/**
* @author zhangshiqin
* @date 2022/1/17 - 15:09
* @description:
*/
public class FunctionInterface {
//4.Function<T,R>
public static <T,R> R apply(T args, Function<T,R> function){
System.out.println(function.apply(args));
return function.apply(args);
}
public static void main(String[] args) {
FunctionInterface.apply("money",a->a.hashCode());
}
}
return function.apply(args);
}
public static void main(String[] args) {
FunctionInterface.apply("money",a->a.hashCode());
}
}