Logging inside Stream

前端 未结 2 366
生来不讨喜
生来不讨喜 2021-01-04 20:18

I am trying to convert this piece of code to Java 8 stream:

if(list!=null && list.size()>0){
    Actor actor = null;
    for(Actor actor:list){
           


        
相关标签:
2条回答
  • 2021-01-04 20:57

    Often we put logging into our code to support debugging. In this case I would recommend you to have a look at the peek method.

    Here is a hint:

       List<Actor> actors = ...;
    
        actors.
            stream().
            peek(a -> System.out.println("Processing code: " + a.getCode())).
            forEach(a -> {/*Do something here*/});
    

    From the javadocs:

    API Note: This method exists mainly to support debugging, where you want to see the elements as they flow past a certain point in a pipeline:

    0 讨论(0)
  • 2021-01-04 21:06

    I think that using forEach in this case would be working quite nice for you? Example:

    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);
    })
    

    You may want to throw in Objects.isNull() as well in some cases - e.g for that getCode part - as well as Optional.ofNullable?

    0 讨论(0)
提交回复
热议问题