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

Java 9 Optional 增强:stream()、ifPresentOrElse() 与 or()

三大新方法

1. stream()

public Stream stream()

有值返回单元素流,无值返回空流。配合 flatMap 替代 filter + map 模式。

List> list = Arrays.asList(
    Optional.empty(), Optional.of("A"), Optional.empty(), Optional.of("B"));

// Java 8 冗长
List filtered = list.stream()
    .flatMap(o -> o.isPresent() ? Stream.of(o.get()) : Stream.empty())
    .collect(Collectors.toList());

// Java 9 简洁
List filtered = list.stream()
    .flatMap(Optional::stream)
    .collect(Collectors.toList());
// 结果: [A, B]

2. ifPresentOrElse(Consumer, Runnable)

public void ifPresentOrElse(Consumer action, Runnable emptyAction)

有值执行 action,无值执行 emptyAction,避免 if-else 分支。

Optional opt = Optional.of(1);
opt.ifPresentOrElse(
    x -> System.out.println("Value: " + x),
    () -> System.out.println("Not Present.")
);  // Value: 1

opt = Optional.empty();
opt.ifPresentOrElse(
    x -> System.out.println("Value: " + x),
    () -> System.out.println("Not Present.")
);  // Not Present.

3. or(Supplier)

public Optional or(Supplier> supplier)

有值返回自身,无值返回 supplier 提供的 Optional,链式 fallback 替代 orElseGet 返回裸值。

Supplier> fallback = () -> Optional.of("Not Present");

Optional.of("Mahesh")
    .or(fallback)
    .ifPresent(x -> System.out.println("Value: " + x));  // Value: Mahesh

Optional.empty()
    .or(fallback)
    .ifPresent(x -> System.out.println("Value: " + x));  // Value: Not Present

对比总结

方法返回用途Java 8 替代
stream()Stream流管道中扁平化 Optional 序列filter+map+flatMap
ifPresentOrElsevoid有值/无值双分支处理ifPresent + if (!isPresent)
orOptional链式 fallback 保持 Optional 类型orElseGet 返回 T

实战模式:配置加载 fallback 链

Optional config = Optional.ofNullable(System.getenv("APP_CONFIG"))
    .or(() -> Optional.ofNullable(System.getProperty("app.config")))
    .or(() -> Optional.of("default-config"));
// 依次尝试环境变量、系统属性、默认值,全程 Optional 链式

java

  1. 深入理解 Java final 关键字:变量、方法与类的不可变性
  2. Java instanceof 运算符完全指南:用法、继承与接口检查
  3. 精通 Java 继承:核心概念、类型与实战示例
  4. 深入理解 Java 静态嵌套类:用法、差异与实战示例
  5. 精通 Java 匿名内部类:定义、语法与实战示例
  6. Java 单例模式详解:安全实现与使用指南
  7. 精通 Java 反射:运行时检查类、方法与字段
  8. 掌握 Java ObjectOutputStream:序列化、核心方法与实战示例
  9. 掌握 Java 泛型:构建可复用、类型安全的代码
  10. 掌握 Java 文件操作:java.io 包下的创建、读取、写入与删除
  11. Java 9 Stream API 增强:takeWhile、dropWhile、iterate 与 ofNullable
  12. 掌握 Java 8 Optional:实现空安全代码的实用指南