1.lambda 使用
2.自定义函数接口
3.stream Api
4.并行
5.optional异常判断
* lambda 函数式编程
* (1)Function: 指定入参和返回值类型(可以为void)
* -> compose: before
* -> andThen: after
* apply()
* (2)Consumer: 指定入参,无返回值,注重内部消费
* accept()
* (3)Predicate: 指定入参,返回值为Boolean
* test()
* (4)Supplier: 无入参,指定返回值类型
* get()
Lambda 表达式的基础语法:
Java8中引入了一个新的操作符 “->” 该操作符称为箭头操作符或 Lambda 操作符
(args1, args2...) -> {};
有且只有一个抽象方法的接口被成为函数式接口!
1.Function
(1)用于指定入参,返回值类型(这里可以指定为void)
(2)执行apply
Function<Integer,Integer> function01 = i -> i*10;
System.out.println(function01.apply(10));
2.Consumer
(1)指定入参,无返回值类型 ;
(2)注重内部消费
Consumer<List<String>> consumer02 = list -> {
list.forEach(s -> System.out.println("list: "+s));
};
consumer02.accept(Arrays.asList("a","b","c"));
3.Predicate
(1) 指定入参,不用指定返回值类型(限制为:Boolean)
Predicate<String> predicate01 = s -> "success".equals(s);
System.out.println(predicate01.test("fail"));
4.Supplier
(1)无入参,指定返回值类型
Supplier<String> supplier01 = () -> "hello lambda";
System.out.println(supplier01.get());
总结:
(1)根据有无入参来判断:针对有参的方法,使用Function接口;无参的方法,使用Supplier
(2)根据有无返回值来判断:针对有返回值,使用Function;无返回值使用Consumer
# 自定义函数接口
函数式编程:
(1)只包含一个抽象方法的接口
(2)接口上使用 @FunctionalInterface 注解
@FunctionalInterface
public interface MyFunc01<T> {
void run(T t);
}
// 使用自定义接口
MyFunc01<String> myFunc01 = s -> System.out.println("this is my funtion: "+ s);
myFunc01.run("hello");