public class Java8Tesmt2 {
public static void main(String[] args) {
// 例1:比较器
// comparing的传参为一个函数接口Function,其有个抽象方法apply,方法返回要比较的值
// Integer a: 是入参,->: 把入参与Lambda主体分离,Lambda主体是返回值,这样就完整的表达函数式接口了
Comparator<Integer> comparing1 = Comparator.comparingInt((Integer a) -> a.intValue());
//Lambda能接着抽象成方法引用,这只是个语法糖,重点还是在函数接口上
Comparator<Integer> comparing2 = Comparator.comparing(Integer::intValue).reversed();
// 翻转
int compare = comparing2.reversed().compare(1, 2);
System.out.println(compare); //输出1
// 例2:函数式接口传参,谓词拼接
// Predicate<String> predicate = s -> s.length() == 1;
test("aa", s -> s.length() == 1); //输出yes
}
/**
* @Param predicate:传参为一个函数接口,接口有个test抽象方法,
* 使用函数式接口的好处是,你不用显式声明这个接口,只需要在方法找用lamada表达式表示此接口
**/
private static void test(String str, Predicate<String> predicate) {
// 拼接个or谓词,java8不能做到在lamada表达式后面接着跟方法,只能在生成接口引用后,再点儿上or方法
if (predicate.or(s -> s.length() == 2).test(str)) {
System.out.println("yes");
}
}
}