五 SpringBoot - Java8 新特性( 三 )

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);测试结果:
五 SpringBoot - Java8 新特性

文章插图
2.2.2 基于集合//基于集合List<String> nameList = Arrays.asList("Lilei","Hanmeinei","lisi","zhangsan","xiaolong","xiaohu");//通过集合对象的stream方法nameList.stream().map(name -> name.toLowerCase()).forEach(System.out::println);测试结果:
五 SpringBoot - Java8 新特性

文章插图
2.3 流的中间操作2.3.1 筛选和切片2.3.1.0 数据准备2.3.1.0.1bean//小说实体@Data@Builder@NoArgsConstructor@AllArgsConstructorpublic class Story {// 编号private Integer id;// 书名private String name;// 作者private String author;// 价格private Double price;// 章节private Integer sections;// 分类private String category;}2.3.1.0.2 StoryUtil//小说工具类public class StoryUtil {public static List<Story> stories = new ArrayList<>();static {stories.add(Story.builder().id(101).name("斗破苍穹").author("zhangsan").price(109.9).sections(1202).category("玄幻").build());stories.add(Story.builder().id(201).name("斗罗大陆").author("lisi").price(88.9).sections(999).category("科幻").build());stories.add(Story.builder().id(301).name("凡人修仙传").author("wangwu").price(77.9).sections(1303).category("武侠").build());stories.add(Story.builder().id(401).name("圣墟").author("zhuliu").price(121.9).sections(1404).category("玄幻").build());stories.add(Story.builder().id(501).name("吞噬星空").author("sunqi").price(135.9).sections(996).category("历史").build());stories.add(Story.builder().id(601).name("完美世界").author("zhaoba").price(66.9).sections(999).category("玄幻").build());stories.add(Story.builder().id(701).name("大王饶命").author("qianjiu").price(135.9).sections(997).category("玄幻").build());stories.add(Story.builder().id(801).name("大奉打更人").author("zhoushi").price(133.9).sections(1606).category("军事").build());}}2.3.1.1筛?。篺ilter//筛?。?filter,相当于数据库中的where条件log.info("-------------- 筛?。?filter ----------------");//查看小说集合中,价格大于100块的所有小说StoryUtil.stories.stream().filter(story -> story.getPrice() > 100).forEach(System.out::println);//练习:查看小说集合中,所有章节数大于1000且作者中包含n的小说log.info("\n------- 查看小说集合中 , 所有章节数大于1000且作者中包含n的小说 ---------");StoryUtil.stories.stream().filter(story -> story.getSections() > 1000 && story.getAuthor().contains("n") ).forEach(System.out::println);测试结果1:

推荐阅读