在Stream中记录

时间:2017-03-30 06:11:50

标签: java java-8 java-stream

我正在尝试将这段代码转换为Java 8流:

if(list!=null && list.size()>0){
    Actor actor = null;
    for(Actor actor:list){
        log.info("Actor being read: "  actor.getCode());
        List areaList = areaDAO.getArea(actor.getCode());
        if (areaList.size() > 0)
        {
            actor.setArea((String) areaList.get(0));
            log.info("Area{" + areaList.get(0)
                     + "} is fetched for actor{" + actor.getCode() + "}.");
        }
        this.getContext().setReadCount(1);
    }
}

但是我不知道如何处理这种情况下的日志记录?这是一个好习惯吗?感谢您的帮助。感谢

2 个答案:

答案 0 :(得分:21)

我们经常将登录信息放入代码中以支持调试。在这种情况下,我建议您查看peek方法。

这是一个提示:

8.2.1 (8C1002)

来自javadocs:

  

API注意:       此方法主要用于支持调试,您希望在元素流经管道中的某个点时查看元素:

答案 1 :(得分:3)

我认为在这种情况下使用forEach会对你有用吗?例如:

list.stream().forEach(actor -> {
    log.info(String.format("Actor being read {%s}", actor));
    String actorCode = actor.getCode();
    areaDAO.getArea(actorCode).stream().findFirst().ifPresent(area -> {
       actor.setArea(area);
       log.info(String.format("Area {%s} is fetched for actor {%s}", area, actorCode));
    });
    getContext().setReadCount(1);
})

在某些情况下,你也可能想要投入Objects.isNull() - 例如对于那个getCode部分 - 以及Optional.ofNullable