亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> java

Java 9 Stream API 增强:takeWhile、dropWhile、iterate 与 ofNullable

新增四大方法

1. takeWhile(Predicate)

有序流:取最长前缀,直到谓词首次返回 false;无序流:取任意满足谓词的子集(实现相关)。

Stream.of("a","b","c","","e","f")
      .takeWhile(s -> !s.isEmpty())
      .forEach(System.out::print);  // 输出: abc

2. dropWhile(Predicate)

有序流:丢弃最长前缀(谓词为 true),返回剩余元素;无序流:丢弃任意满足谓词的子集。

Stream.of("a","b","c","","e","f")
      .dropWhile(s -> !s.isEmpty())
      .forEach(System.out::print);  // 输出: ef

Stream.of("a","b","c","","e","","f")
      .dropWhile(s -> !s.isEmpty())
      .forEach(System.out::print);  // 输出: ef

3. iterate(seed, hasNext, next)

有限迭代流:在 hasNext 返回 false 时停止,替代无限 iterate(seed, next) 配合 limit() 的模式。

IntStream.iterate(3, x -> x < 10, x -> x + 3)
         .forEach(System.out::println);  // 3, 6, 9

4. ofNullable(T)

空安全流源:非 null 返回单元素流,null 返回空流,避免 NullPointerException 与显式判空。

Stream.ofNullable(100).count();  // 1
Stream.ofNullable(null).count(); // 0

对比总结

方法用途典型场景
takeWhile前缀截取读取配置直到空行、处理有序日志直到标记行
dropWhile前缀跳过跳过注释行、跳过 CSV 头部
iterate(3参数)有条件有限迭代生成等差数列、斐波那契数列、分页游标
ofNullable空安全单元素流可选配置项转流、避免三元判空

组合示例:处理带注释的配置文件

List lines = Files.readAllLines(Paths.get("config.txt"));
List config = lines.stream()
    .dropWhile(line -> line.startsWith("#"))  // 跳过头部注释
    .takeWhile(line -> !line.isEmpty())       // 取正文直到空行
    .map(String::trim)
    .filter(line -> !line.isEmpty())
    .collect(Collectors.toList());

java

  1. 精通 Java 运算符:类型、语法与实战示例
  2. Java 注释:类型、用法与最佳实践
  3. 精通 Java 增强 for 循环:语法、示例与最佳实践
  4. 精通 Java 字符串:创建、方法与最佳实践
  5. 精通 Java 接口:概念、实现与最佳实践
  6. 精通 Java 匿名内部类:定义、语法与实战示例
  7. 精通 Java Try-With-Resources:自动资源管理详解
  8. Java 注解详解:类型、放置位置与实战示例
  9. Java 断言实战指南:尽早发现 Bug 与保障代码可靠性
  10. Java 9 (JDK 9) 核心特性与优势全览
  11. Java 9 进程 API 改进:ProcessHandle 与异步控制
  12. Java 9 Optional 增强:stream()、ifPresentOrElse() 与 or()