You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Guava简化从两个Optional提取值到ImmutableSet的代码?

简化Optional值提取生成ImmutableSet的写法

这里有两种简洁的写法可以完全替代原有的if-else逻辑:

方法一:利用Stream API(推荐)

这种方式代码最紧凑,利用Java 8引入的Stream结合Optional的stream()方法,自动过滤空值:

private Set<String> getValues(Optional<String> one, Optional<String> two) {
    return Stream.of(one, two)
            .flatMap(Optional::stream)
            .collect(ImmutableSet.toImmutableSet());
}

逻辑说明

  • Stream.of(one, two)将两个Optional对象包装成Stream
  • flatMap(Optional::stream)会把有值的Optional转为包含对应值的Stream,空Optional则转为空Stream,自动跳过空值
  • 最后通过collect(ImmutableSet.toImmutableSet())把所有有效值收集为ImmutableSet,无有效值时返回空的ImmutableSet

方法二:使用ImmutableSet.Builder

如果更习惯Builder模式,也可以用这种方式,通过Optional的ifPresent方法条件添加元素:

private Set<String> getValues(Optional<String> one, Optional<String> two) {
    ImmutableSet.Builder<String> builder = ImmutableSet.builder();
    one.ifPresent(builder::add);
    two.ifPresent(builder::add);
    return builder.build();
}

逻辑说明

  • 初始化ImmutableSet的Builder实例
  • 调用每个Optional的ifPresent方法,仅当Optional存在值时,才将值添加到Builder中
  • 最后调用build()生成最终的ImmutableSet,空值会被自动忽略

内容的提问来源于stack exchange,提问作者Punter Vicky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 01:25:21