ASP个人网站的建设,营销活动有哪些,网站建设域名申请,网站建设类型有哪些Java 8#xff1a;Stream API Java 8 中的 Stream API 是一组用于对集合数据进行处理的新特性#xff1b;提供一种以声明式风格对集合进行操作的方式#xff0c;简化集合的处理#xff0c;使得代码更加简洁、优雅#xff0c;并且能够更高效地处理数据#xff1b; 这种风格…Java 8Stream API Java 8 中的 Stream API 是一组用于对集合数据进行处理的新特性提供一种以声明式风格对集合进行操作的方式简化集合的处理使得代码更加简洁、优雅并且能够更高效地处理数据 这种风格将要处理的元素集合看作一种流 流在管道中传输 并且可以在管道的节点上进行处理 比如筛选 排序聚合等元素流在管道中经过中间操作intermediate operation的处理最后由最终操作(terminal operation)得到前面处理的结果 特性 声明式编程风格Stream API 提供了类似于 SQL 查询的声明式编程方式通过链式调用一系列方法来对数据进行操作而不是显式地编写循环或临时变量。这使得代码更加简洁、易读和易于理解 惰性求值Stream 是惰性求值的即只有在终止操作时才会真正执行中间操作如 filter、map、sorted 等只是定义了数据流的处理步骤而不会立即执行这样可以优化处理过程避免不必要的计算提高性能 函数式接口支持Stream API 需要与函数式接口Functional Interface一起使用函数式接口是只包含一个抽象方法的接口Lambda 表达式可以作为函数式接口的实例进行传递这种支持使得 Stream API 能够充分发挥函数式编程的优势 生成流
Java 8 中, 集合接口有两个方法来生成流
stream()为集合创建串行流parallelStream() −为集合创建并行流
ListString strings Arrays.asList(abc, , bc, efg, abcd,, jkl);
ListString filtered strings.stream().filter(string - !string.isEmpty()).collect(Collectors.toList());strings 列表创建了一个流通过 stream() 方法将列表转换成了一个流然后使用 filter 方法传递一个 Lambda 表达式来筛选过滤不满足条件的元素在这里Lambda 表达式 string - !string.isEmpty() 检查字符串是否非空只有在字符串不为空的情况下该元素会被保留在流中最后使用 collect 方法结合 Collectors.toList() 收集器将符合条件的元素收集到一个新的列表 filtered 中 流式操作
forEach Stream 提供了新的方法 forEach 来迭代流中的每个数据以下代码片段使用 forEach 输出10个随机数 ints() 方法用于生成一个无限的随机整数流 Random random new Random();
random.ints().limit(10).forEach(System.out::println);map map 方法用于映射每个元素到对应的结果以下代码片段使用 map 输出了元素对应的平方数 ListInteger numbers Arrays.asList(3, 2, 2, 3, 7, 3, 5);
// 获取对应的平方数
ListInteger squaresList numbers.stream().map( i - i*i).distinct().collect(Collectors.toList());filter filter 方法用于通过设置的条件过滤出元素以下代码片段使用 filter 方法过滤出空字符串 ListStringstrings Arrays.asList(abc, , bc, efg, abcd,, jkl);
// 获取空字符串的数量
long count strings.stream().filter(string - string.isEmpty()).count();limit limit 方法用于获取指定数量的流以下代码片段使用 limit 方法打印出 10 条数据 Random random new Random();
random.ints().limit(10).forEach(System.out::println);sorted sorted 方法用于对流进行排序以下代码片段使用 sorted 方法对输出的 10 个随机数进行排序 Random random new Random();
random.ints().limit(10).sorted().forEach(System.out::println);并行parallel程序 parallelStream 是流并行处理程序的代替方法以下实例我们使用 parallelStream 来输出空字符串的数量 ListString strings Arrays.asList(abc, , bc, efg, abcd,, jkl);
// 获取空字符串的数量
long count strings.parallelStream().filter(string - string.isEmpty()).count();Collectors Collectors 类实现了很多归约操作例如将流转换成集合和聚合元素Collectors 可用于返回列表或字符串 ListStringstrings Arrays.asList(abc, , bc, efg, abcd,, jkl);
ListString filtered strings.stream().filter(string - !string.isEmpty()).collect(Collectors.toList());System.out.println(筛选列表: filtered);
String mergedString strings.stream().filter(string - !string.isEmpty()).collect(Collectors.joining(, ));
System.out.println(合并字符串: mergedString);统计 产生统计结果的收集器它们主要用于int、double、long等基本类型上它们可以用来产生类似如下的统计结果 ListInteger numbers Arrays.asList(3, 2, 2, 3, 7, 3, 5);IntSummaryStatistics stats numbers.stream().mapToInt((x) - x).summaryStatistics();System.out.println(列表中最大的数 : stats.getMax());
System.out.println(列表中最小的数 : stats.getMin());
System.out.println(所有数之和 : stats.getSum());
System.out.println(平均数 : stats.getAverage());map 操作 Stream API 中三种常见的 map 操作map、mapToInt 和 flatMap map用于将流中的元素映射为另一种类型的流。例如将一个对象流中的每个对象映射为对象的某个属性值组成的流mapToInt用于将流中的元素映射为 IntStream即基本类型 int 的流。它通常用于将流中的元素映射为整数值flatMap用于将流中的每个元素映射为一个流然后将这些流连接成一个单一的流。它通常用于扁平化处理嵌套的流结构案例
systemApplicationTypeRepo.list(new QueryWrapperSystemApplicationType().orderByAsc(SystemApplicationTypeCol.ID)).stream().map(bean - new ResCommonIdNameCode(bean.getId(), bean.getName(), bean.getName())).collect(Collectors.toList() systemApplicationTypeRepo.list(…)这部分代码使用了一个名为 systemApplicationTypeRepo 的仓库Repository通过调用 list 方法来查询数据库中的数据list 方法接受一个查询条件对象 QueryWrapper 作为参数用于指定查询条件 new QueryWrapper().orderByAsc(SystemApplicationTypeCol.ID)这是创建一个查询条件对象的过程QueryWrapper 是 MyBatis-Plus 提供的用于构建查询条件的工具orderByAsc(SystemApplicationTypeCol.ID) 表示按照 SystemApplicationType 实体类中 ID 字段的升序进行排序。 .stream()这将查询结果转换为一个 Stream 对象便于后续的操作 .map(bean - new ResCommonIdNameCode(bean.getId(), bean.getName(), bean.getName()))这部分使用 map 操作将查询结果的每个 SystemApplicationType 对象映射为 ResCommonIdNameCode 对象ResCommonIdNameCode 是一个自定义的类构造函数接受 id、name 和 code 作为参数用于创建一个新的对象 .collect(Collectors.toList())最后使用 collect 方法将 Stream 对象收集为 List即最终的结果列表 noticeResponses.stream().sorted(Comparator.comparing(SystemNoticeResponse::getReadStatus).thenComparing(Comparator.comparing(SystemNoticeResponse::getCreateAt).reversed())).collect(Collectors.toList()); .stream()将 noticeResponses 列表转换为一个 Stream 对象使其能够使用 Stream API 提供的操作 .sorted(…)这是一个中间操作用于对流中的元素进行排序使用 Comparator.comparing(…) 方法创建了一个比较器用于指定排序的规则首先按照 SystemNoticeResponse 对象的 readStatus 字段进行升序排序.thenComparing(…) 表示如果 readStatus 相同则按照 createAt 字段进行降序排序使用 reversed() 方法 .collect(Collectors.toList())最后使用 collect 方法将排序后的 Stream 对象收集为一个新的 List即排序后的 noticeResponses 列表