当前位置: 首页 > news >正文

制作伪装网站上海黑马网站制作

制作伪装网站,上海黑马网站制作,wordpress欢迎页,一个域名一个ip做多个网站Java的Stream流#xff1a;文件处理、排序与串并行流的全面指南 Java 8 引入了 Stream API#xff0c;这是一个用于处理集合数据的强大工具#xff0c;它提供了一种声明式的方式来进行聚合操作。Stream 不是一个数据结构#xff0c;而是一种对数据进行操作的抽象#xff…Java的Stream流文件处理、排序与串并行流的全面指南 Java 8 引入了 Stream API这是一个用于处理集合数据的强大工具它提供了一种声明式的方式来进行聚合操作。Stream 不是一个数据结构而是一种对数据进行操作的抽象允许开发者以一种更简洁、易读的方式来表达复杂的查询逻辑。下面我们将详细介绍 Java Stream 的概念、特性以及如何使用它。 1 Stream 的基本概念 Stream 是一个来自源的数据元素序列支持顺序和并行聚合操作。它可以看作是高级版本的 Iterator但是与 Iterator 不同的是Stream 操作可以链式调用从而形成一系列的操作流水线。此外Stream 的操作不会修改源数据而是生成新的结果。 1.2 Stream 的创建 创建 Stream 有多种方式 从集合创建大多数集合类都提供了 stream() 和 parallelStream() 方法来创建串行流或并行流。通过静态方法创建Stream.of() 可以接受不定数量的参数来创建流Stream.generate() 和 Stream.iterate() 可以生成无限流通常需要结合 limit() 来限制大小。从数组创建可以通过 Arrays.stream(array) 或者直接调用数组上的 stream() 方法来创建流。文件读取BufferedReader.lines() 可以将文件的每一行转换成流中的元素。正则表达式分割字符串Pattern.splitAsStream() 可以根据指定的分隔符将字符串拆分成流。 1.3 中间操作 中间操作是指那些返回另一个 Stream 的操作它们本身不会触发任何计算只有当终端操作被执行时才会真正开始处理数据。常见的中间操作包括 filter过滤掉不符合条件的元素。map对每个元素应用一个函数并返回一个新的 Stream。flatMap对每个元素应用一个函数该函数返回一个 Stream然后将所有这些 Stream 扁平化为一个单独的 Stream。distinct去除重复元素。sorted对元素排序可以选择自然排序或自定义比较器。peek对每个元素执行副作用操作如打印但不改变流的内容。 1.4 终端操作 一旦执行了终端操作Stream 就会被消耗掉不能再被使用。常见的终端操作有 forEach遍历流中的每一个元素。collect将流中的元素收集到集合中如 List 或 Set。reduce通过某种方式减少流中的元素例如求和或乘积。count统计流中元素的数量。min/max找到最小值/最大值。anyMatch/allMatch/noneMatch检查是否至少有一个/所有/没有元素满足给定的谓词。 2 基本使用示例 示例1 筛选大于等于 10 的整数 ListInteger numbers Arrays.asList(5, 10, 15, 20, 25, 30); numbers.stream().filter(num - num 10).forEach(System.out::println);这段代码会输出 10, 15, 20, 25, 30因为这些都是大于等于 10 的数字。 示例2 提取员工姓名 ListEmployee employees Arrays.asList(new Employee(Alice, 25),new Employee(Bob, 30),new Employee(Charlie, 35) ); employees.stream().map(Employee::getName).forEach(System.out::println);这里我们使用 map 操作提取了每个员工的名字并打印出来。 示例3 去重 ListInteger numbers Arrays.asList(1, 2, 3, 4, 2, 3, 5, 1, 6); numbers.stream().distinct().forEach(System.out::println);这段代码会输出 1, 2, 3, 4, 5, 6因为 distinct 操作已经移除了重复的元素。 3 文件读取与 Stream 结合 在 Java 8 中Files.lines() 方法提供了一种简单而有效的方式来逐行读取文件内容并将其转换为 Stream。这使得我们可以利用 Stream 的强大功能来处理文件中的每一行数据例如过滤、映射、排序等。下面我们将通过几个具体的示例来展示如何结合文件读取操作使用 Stream。 示例 4逐行读取文件并打印 import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.stream.Stream;public class 读取文件示例 {public static void main(String[] args) {try (StreamString 行流 Files.lines(Paths.get(data.txt))) {行流.forEach(System.out::println);} catch (IOException e) {System.err.println(读取文件时发生错误: e.getMessage());}} }这段代码展示了如何使用 Files.lines() 方法逐行读取文件 data.txt 并打印每一行的内容。try-with-resources 语句确保了流在使用完毕后会被自动关闭避免资源泄露。 示例 5查找包含特定关键词的行 import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.Optional;public class 查找关键词示例 {public static void main(String[] args) {try (StreamString 行流 Files.lines(Paths.get(data.txt))) {OptionalString 包含密码的行 行流.filter(行 - 行.contains(密码)).findFirst();if (包含密码的行.isPresent()) {System.out.println(找到包含 密码 的行: 包含密码的行.get());} else {System.out.println(没有行包含 密码.);}} catch (IOException e) {System.err.println(读取文件时发生错误: e.getMessage());}} }此示例展示了如何使用 filter 和 findFirst 方法来查找文件中包含特定关键词如 “密码”的第一行并将其打印出来。如果找不到符合条件的行则输出相应的提示信息。 示例 6统计文件中单词的数量 import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.regex.Pattern; import java.util.stream.Collectors;public class 统计单词数量示例 {public static void main(String[] args) throws IOException {long 单词总数 Files.lines(Paths.get(data.txt)).flatMap(Pattern.compile(\\s)::splitAsStream).count();System.out.println(总共有 单词总数 个单词);} }在这个例子中我们使用 flatMap 方法结合正则表达式来分割每一行文本从而得到一个包含所有单词的流。然后我们使用 count 方法统计总共有多少个单词。这种方法非常适合处理大文件因为它可以在不加载整个文件到内存的情况下完成任务。 示例 7按字母顺序排序并去重后的单词列表 import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.List; import java.util.regex.Pattern; import java.util.stream.Collectors;public class 排序去重单词示例 {public static void main(String[] args) throws IOException {ListString 排序后的唯一单词 Files.lines(Paths.get(data.txt)).flatMap(Pattern.compile(\\s)::splitAsStream).distinct().sorted().collect(Collectors.toList());System.out.println(按字母顺序排序并去重后的单词: 排序后的唯一单词);} }这段代码展示了如何结合 flatMap、distinct 和 sorted 方法来获取文件中按字母顺序排序且去重后的单词列表。最终结果被收集到一个 ListString 中并打印出来。这种方法可以有效地去除重复项并对结果进行排序非常适合用于文本分析等场景。 5 串行流与并行流 串行流是指所有操作都在单个线程上依次执行而并行流则是指操作可以在多个线程上并发执行。并行流可以在多核处理器上提高效率但是需要注意并不是所有的操作都适合并行化而且并行流可能会带来额外的开销。因此在选择使用串行流还是并行流时应该根据具体的应用场景做出权衡。 示例 8使用串行流计算文件中单词的总长度 import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.regex.Pattern;public class 串行流计算单词总长度示例 {public static void main(String[] args) throws IOException {long 单词总长度 Files.lines(Paths.get(data.txt)).flatMap(Pattern.compile(\\s)::splitAsStream).mapToInt(String::length).sum();System.out.println(所有单词的总长度: 单词总长度);} }这段代码展示了如何使用串行流来计算文件中所有单词的总长度。flatMap 方法将每一行文本拆分为多个单词mapToInt 方法将每个单词映射为其长度最后使用 sum 方法计算所有单词长度的总和。 示例 9使用并行流计算文件中单词的总长度 import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.regex.Pattern;public class 并行流计算单词总长度示例 {public static void main(String[] args) throws IOException {long 单词总长度 Files.lines(Paths.get(data.txt)).parallel() // 使用并行流.flatMap(Pattern.compile(\\s)::splitAsStream).mapToInt(String::length).sum();System.out.println(所有单词的总长度: 单词总长度);} }在这段代码中我们通过调用 parallel() 方法将串行流转换为并行流从而允许 JVM 在多核处理器上并行处理文件中的每一行。需要注意的是并行流的使用可能会导致结果的顺序发生变化但在本例中由于我们只关心单词长度的总和因此顺序不影响最终结果。 6 性能考量 虽然 Stream 提供了非常方便的操作接口但在某些情况下可能会影响性能特别是对于大规模数据集。并行流可以在多核处理器上提高效率但是需要注意并不是所有的操作都适合并行化而且并行流可能会带来额外的开销。因此在选择使用串行流还是并行流时应该根据具体的应用场景做出权衡。 7 使用 Stream 的注意事项 惰性求值Stream 的中间操作是惰性的只有遇到终端操作时才会触发实际的计算。 不可重用Stream 的一旦被消费即执行了终端操作便不能再次使用。如果需要多次操作同一组数据可以创建多个流对象。 线程安全虽然并行流可以在多线程环境中工作但这并不意味着它是线程安全的。对于非线程安全的操作仍然需要采取适当的同步措施。 总结 通过上述示例我们可以看到 Java Stream API 提供了一种简洁且强大的方式来处理集合数据。无论是文件读取、简单排序还是串行流与并行流的选择Stream 都能够帮助开发者写出更加优雅和高效的代码。然而在实际开发中我们应该根据具体的需求和数据量来决定是否使用 Stream以及选择合适的流类型以确保最佳的性能和可维护性。
http://www.hkea.cn/news/14369800/

相关文章:

  • 柳市做网站制作如何把做的网站放到百度上
  • 怎么优化自己网站电子商务类网站有哪些
  • 深圳市光明建设发展集团网站北京系统开发
  • 最好网站开发公司电话汉源县建设局网站
  • 1个空间做2个网站吗wordpress全程ssl
  • 做网站职员工资1.电子商务网站建设的核心是( )
  • 专业建设网站技术wordpress借贷
  • 怎么用sharepoint做网站企业logo设计注意事项
  • 推几个学习网站如何修改网站后台
  • 临川区建设局网站通过阿里云建设企业网站
  • 织梦电子行业网站模板wordpress 架构
  • 如何开发网站平台wordpress繁體模板
  • 网站网络排名优化方法以下什么是常用的可视化网页制作工具
  • 长乐区住房和城乡建设局网站wordpress站群版
  • 做网站如何添加视频上街郑州网站建设
  • 湖北网站建设服务国外家居设计网站
  • 做互联网的网站设计培训
  • 用asp.net做网站的书游戏网站建设论文
  • 犀牛云网站怎么建设口碑好的专业网站建设
  • 动易网站官网同安区建设局网站招投标
  • 三网合一网站建设计划设计logo网站免费无水印
  • 网站设计公司苏州打不开wordpress站点
  • 网站建设丶金手指花总12给人做网站能赚钱吗
  • 自己如何网站建设wordpress 功能介绍
  • 厦门市建设局网站住房保障哪里帮做企业网站
  • 建网站的客户厦门网站建设网站
  • 网站名称和域名有关系如何建立自己的微信小程序
  • 网站建设二级分销坪地网站建设如何
  • 网站建设与管理就业岗位wordpress加会员中心
  • 建设外贸网站的细节团队拓展训练