如何将 forEach 与 slf4j.logger.info 一起使用
how to use forEach with slf4j.logger.info
我正在开发一个基于 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
}
}
Logger.info
收到 String
,因此您必须将 MyPojo
转换为 toString()
:
的字符串
myPojos.stream().forEach((myPojo) -> {log.info(myPojo.toString());});
请注意,由于您只有一个语句 lambda,因此您可能会在此处失去一些稳健性:
myPojos.stream().forEach(myPojo -> log.info(myPojo.toString()));
Java 8 lambda 样式。
在 class 级别添加 @Slf4j
。
myPojos.stream().forEach(log::info);
我正在开发一个基于 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
}
}
Logger.info
收到 String
,因此您必须将 MyPojo
转换为 toString()
:
myPojos.stream().forEach((myPojo) -> {log.info(myPojo.toString());});
请注意,由于您只有一个语句 lambda,因此您可能会在此处失去一些稳健性:
myPojos.stream().forEach(myPojo -> log.info(myPojo.toString()));
Java 8 lambda 样式。
在 class 级别添加 @Slf4j
。
myPojos.stream().forEach(log::info);