首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java 8可选/功能代码优化

Java 8可选/功能代码优化
EN

Stack Overflow用户
提问于 2016-10-19 13:45:50
回答 1查看 630关注 0票数 1

有一个接收"someObj“的方法,它的目的是检查Set<>类型的var ASet,遍历它并用数据库对象替换它的对象。为此,我编写了以下代码:

代码语言:javascript
复制
if(!CollectionUtils.isEmpty(someObj.getASet())){
        someObj.setASet(
            someObj.getASet()
                    .stream()
                    .map( c -> AService.getExistingA(c.getId()))
                    .collect(Collectors.toSet())
       );
    }

它有它的目的,但我真的不满意它的可读性。

代码语言:javascript
复制
 Optional.ofNullable(someObj.getASet())
            .ifPresent( ASet->  someObj.setASet(
                                                ASet.stream()
                                                .map( c -> AService.getExistingA(c.getId()))
                                                .collect(Collectors.toSet())
            ));

现在它看起来更难读了,你能推荐一种更好的方法吗?我认为最糟糕的问题是,someObj.setASet看起来很奇怪,在收集之后有什么功能方法来替换这个对象吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-19 14:26:47

尝试使用Optional.map

代码语言:javascript
复制
Optional.ofNullable(someObj.getASet())
        .map(set -> set.stream()
                       .map(c -> AService.getExistingA(c.getId()))
                       .collect(Collectors.toSet()))
        .ifPresent(set -> someObj.setASet(set));

现在,转换逻辑和条件命令“设置结果”是分开的。

或者,旧的备用设备也能工作-使用它没什么害处:

代码语言:javascript
复制
Set set = someObj.getASet();
if (set != null) {
    Set newSet = set.stream()
                    .map(c -> AService.getExistingA(c.getId()))
                    .collect(Collectors.toSet());
    someObj.setASet(newSet);
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40133213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档