五 SpringBoot - Java8 新特性( 二 )

【五 SpringBoot - Java8 新特性】// 借助Comparator接口,讲解多个参数Comparator<Integer> comparator1 = new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {return o1.compareTo(o2);}};// 未使用lambda表达式,用法:带多个参数,有返回值log.info("------ 不使用lambda表达式,实现Comparator接口,比较12,23的大小:{} ------",comparator1.compare(12,23));// 小于 -1,大于 1,等于 01.2.3.2 简化写法:省略参数类型,但是不可以省略小括号,一条语句省略大括号,跟返回值无关(不用手动加return)//省略参数类型,但是不可以省略小括号,一条语句省略大括号,跟返回值无关(不用手动加return)Comparator<Integer> comparator2 = (o1,o2) -> o1.compareTo(o2);log.info("------ 使用lambda表达式,实现Comparator接口,比较23,12的大小:{} ------",comparator2.compare(23,12));// 大于 11.2.3.3 简化写法:多条语句不可以省略大括号,带返回值(需手动加return)//多条语句不可以省略大括号,带返回值(需手动加return)Comparator<Integer> comparator3 = (o1,o2) -> {log.info("------ 比较原数值为:{},{}",o1,o2);return o1.compareTo(o2);};log.info("------ 使用lambda表达式,实现Comparator接口,比较22,22的大小:{} ------",comparator3.compare(22,22));// 等于 01.3 java8中提供的函数式接口1.3.1消费型接口 Consumer (方法有一个参数,没有返回值)1.3.1.1 自定义方法 (使用接口的 void accept(T t))//自定义方法,带有一个消费型接口参数,可以实现一个方法,处理不同的业务场景static void useConsumer(Double salary,Consumer<Double> consumerDate){consumerDate.accept(salary);}1.3.1.2 方法调用static void testLambdaConsumer(){//场景,同一个接口,有多个实现,以前,必须要创建接口的多个实现类,现在使用lambda,把接口的实现交给调用方法传递//实现1:Tom发了5000工资,去买手机,模拟接口的第一个实现//以前,必须提供接口的实现类对象useConsumer(5000.0,salary -> log.info("Tom,工资:{},5000买手机",salary));//实现1:Tom发了10000工资,去买手机,买平板,模拟接口的第二个实现//以前,必须提供接口的 两个 实现类对象useConsumer(10000.0,slary -> {log.info("JiMe工资:{},5000买手机",slary);log.info("JiMe工资:{},4000买平板",slary);});}1.3.1.3 测试结果

五 SpringBoot - Java8 新特性

文章插图
1.3.2 供给型接口Supplier(方法没有参数,可以返回任意类型的结果)1.3.2.1 自定义方法 (使用接口的 T get() )//带一个供给型参数,可以实现同一个方法,处理实现同一个方法,处理不同的业务场景,给的数据不同,返回的结果不同static String useSupplier(Double salary, Supplier<Double> supplierData){//判断是否高薪的逻辑if(salary > supplierData.get()){return "高薪";}return "底薪";}1.3.2.2 方法调用static void testLambdaSupplier(){//场景:不同的部门,针对高薪的判断条件不同,比如:学术部高于8000算高薪,教职部门高于5000算高薪//以前的写法:根据不同的不同,增加if...else 判断,随着部门的增加,你分的判断会越来越复杂log.info("--- 学术部:工资:{},是否高薪:{} ---",9000.0,useSupplier(9000.0,() -> 8000.0));log.info("--- 学术部:工资:{},是否高薪:{} ---",7000.0,useSupplier(7000.0,() -> 8000.0));log.info("--- 教职部:工资:{},是否高薪:{} ---",7000.0,useSupplier(7000.0,() -> 5000.0));log.info("--- 教职部:工资:{},是否高薪:{} ---",4000.0,useSupplier(7000.0,() -> 5000.0));}1.3.2.3 测试结果
五 SpringBoot - Java8 新特性

文章插图

经验总结扩展阅读