如何使用forSach与slf4j.logger.info

Jim*_*m C 4 java lambda log4j slf4j java-8

我正在开发一个基于Spring Batch,Spring Boot,slf4j和Java 8的简单应用程序.我想尽可能多地使用lambda用于学习目的."myPojos.stream()forEach((myPojo) - > {log.info(myPojo);});"是什么问题 下面?该消息抱怨"......不适用于论点<? extends MyPojo".请注意,所有其他三个日志行都正常工作.

public class CustomItemWriter implements ItemWriter<MyPojo> {

    private static final Logger log = LoggerFactory.getLogger(CustomItemWriter.class);

    @Override
    public void write(List<? extends MyPojo> myPojos) throws Exception{
        myPojos.stream().forEach((myPojo)-> {log.info(myPojo);});//error
        myPojos.forEach(System.out::println);//it works
        myPojos.stream().forEach((myPojo) -> {System.out.println(myPojo);}); //it works
        log.info("finish"); //it works
    }

}
Run Code Online (Sandbox Code Playgroud)

Mur*_*nik 7

Logger.info收到一个String,所以你必须转换MyPojo为一个字符串toString():

myPojos.stream().forEach((myPojo) -> {log.info(myPojo.toString());});
Run Code Online (Sandbox Code Playgroud)

请注意,由于您有一个语句lambda,因此您可能会失去一些健壮性:

myPojos.stream().forEach(myPojo -> log.info(myPojo.toString()));
Run Code Online (Sandbox Code Playgroud)


bin*_*iam 5

Java 8 lambda 风格。在班级级别
添加。@Slf4j

myPojos.stream().forEach(log::info);