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

能否用Java 8 Streams简化生成Optional的Java方法代码?

可以实现,简化后的代码如下:
protected Optional<String> getMediaName(Participant participant) {
    Map<String, String> mediaMap = config.getMediaMap();
    return participant.getDevices().stream()
            .filter(device -> device.getMedia() != null)
            .map(ParticipantDevice::getMedia)
            .filter(media -> StringUtils.isNotEmpty(media.getMediaType()))
            .map(media -> media.getMediaType().toUpperCase())
            .filter(mediaMap::containsKey)
            .map(mediaMap::get)
            .findFirst();
}

代码逻辑说明:

  • 先获取媒体映射表mediaMap,避免在流操作中重复调用config.getMediaMap(),提升效率
  • 将设备列表转为Stream,通过filter过滤出媒体对象不为null的设备
  • 用map提取设备对应的媒体对象
  • 再次filter过滤出媒体类型非空的媒体对象
  • 把媒体类型统一转为大写形式
  • 过滤出存在于媒体映射表中的媒体类型
  • 提取映射表中对应的媒体名称
  • 最后调用findFirst(),找到第一个符合条件的结果就返回包装好的Optional,遍历完都没找到则返回Optional.empty(),完全匹配原代码的逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 09:05:23