五 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) ) 和 方法调用static void testLambdaFunction(){Function<Integer,Double> function = num -> new Random().nextInt(num)*1.0;log.info("--- 使用函数型接口,接收整数:{},返回随机浮点型结果:{} ---",96,function.apply(96));}1.3.4.2 测试结果
五 SpringBoot - Java8 新特性

文章插图
1.3.5 自定义函数式接口// 自定义的函数式接口:带一个任意类型参数,返回String类型值// 定义:凡是一个接口中,只有一个抽象方法,那这个接口就是函数式接口,可以别注解 //@FunctionalInterface修饰@FunctionalInterfacepublic interface MyFunctionInterface<T> {//函数式接口中的唯一抽象方法String helloKh96(T t);//可以增加默认方法,允许的default void hiKH96(){//默认方法}}2、StreamAPI2.1 创建流 有限流 和 无限流2.1.1 有限流//有限流,输出1,3,5,7,9 的平方log.info("\n----- 输出1,3,5,7,9 的平方 -----");Stream.of(1,3,5,7,9).forEach(num -> System.out.print(num * num + ";"));测试结果:
五 SpringBoot - Java8 新特性

文章插图
2.1.2 无线流2.1.2.1iterate//无限流:输出前18个奇数log.info("\n ----- 输出前18个奇数 ------");Stream.iterate(1,n -> n+2).limit(10).forEach(num -> System.out.print(num + ";"));2.1.2.2 generate//无限流:输出10个随机数log.info("\n ----- 输出前18个随机数 ------");Stream.generate(() -> new Random().nextInt(100)).limit(10).forEach(num -> System.out.print(num+";"));测试结果:
五 SpringBoot - Java8 新特性

文章插图
2.2 创建流基于数组 和 集合2.2.1 基于数组//基于数组int[] nums = {66,99,44,11,22,55,77,88};//通过Arrays工具类提供的stream 方法int min = Arrays.stream(nums).min().getAsInt();int max = Arrays.stream(nums).max().getAsInt();log.info("\n ------ 数组最小值为 :{} --------",min);log.info("\n ------ 数组最大值为 :{} --------",max);

经验总结扩展阅读