五 SpringBoot - Java8 新特性( 二 )

1.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 新特性

文章插图
1.3.3 断言型接口 Predicate(方法有一个参数 , 有返回值-布尔类型)1.3.3.1 自定义方法 (使用接口的 boolean test(T t) )//将判断条件交给调用方法static List<String> userPredicate(List<String> nameList, Predicate<String> predicateData){//定义要返回的姓名集合List<String> returnNameList = new ArrayList();//使用断言型接口,根据传过来的实现 , 返回不同的结果nameList.forEach(name ->{//调用断言型接口的test方法 , 进行挑选数据if(predicateData.test(name)){returnNameList.add(name);}});//返回符合条件的集合数据returnreturnNameList;}1.3.3.2 方法调用static void testLambdaPredicate(){//使用场景//已知姓名集合 , 根据不同的场景,筛选不同的姓名结果List<String> nameList = Arrays.asList("Lilei","Hanmeinei","lisi","zhangsan","xiaolong","xiaohu");//获取姓名集合中所有包含n的姓名集合,可以定义第一个方法,实现//获取集合中包含i 或者a的姓名集合,可以定义第二个方法,实现//随着规则的改变 , 实现的方法越来越多,去简化,所有的方法就是判断规则不同,其他都一样,可以使用断言型接口,优化//获取姓名集合中所有包含n的姓名集合List<String> nameList_n = userPredicate(nameList,name -> name.contains("n"));log.info("姓名集合中所有包含n的姓名集合:{}",nameList_n);//获取集合中包含i 或者a的姓名集合List<String> nameList_i_a = userPredicate(nameList,name -> name.contains("i") || name.contains("a"));log.info("获取集合中包含i 或者a的姓名集合:{}",nameList_i_a);}1.3.3.3 测试结果
五 SpringBoot - Java8 新特性

文章插图
1.3.4 函数接口 Function,有任意类型参数 , 有任意类型返回值1.3.4.1 自定义方法(使用接口的R apply(T t) ) 和 方法调用

推荐阅读