使用Java Vavr将Try<List<Message>>转换为Try<List<SummarizedMessage>>
优化实现方案
你可以直接对messagesRepository.findAll()返回的Vavr Try实例进行链式map操作,无需手动取值再封装,完全符合Vavr的函数式设计规范:
return messagesRepository.findAll() .map(messages -> messages.stream() .map(m -> new SummarizedMessage(m.destination(), m.title(), m.date())) .toList() );
优化点说明
- 移除了不安全的
get()调用:原代码中get()会在Try为Failure状态时直接抛出未捕获异常,丢失Try自带的错误容错能力,优化后的写法会自动传递上游的Failure状态,不会中途崩溃 - 无需手动调用
Try.success()封装结果:map操作会自动将转换后的返回值封装为Success状态,全程保持Try的容器语义 - 无多余中间变量,链式调用符合函数式编码习惯
如果你的项目中已经全面使用Vavr集合API替换JDK集合,写法可以更简洁:
// 当messagesRepository.findAll()返回Try<io.vavr.collection.List<Message>>时可用 return messagesRepository.findAll() .map(messages -> messages.map(m -> new SummarizedMessage(m.destination(), m.title(), m.date())));
内容的提问来源于stack exchange,提问作者Marcio Frayze
相关产品推荐
相关产品推荐

