Ich entwickle eine einfache Anwendung, die auf Spring Batch, Spring Boot, slf4j und Java 8 basiert. Ich möchte Lambda so oft wie möglich für Lernzwecke verwenden. Was ist falsch an "myPojos.stream () forEach ((myPojo) - & gt; {log.info (myPojo);});" unten? Die Nachricht beschwert sich "... gilt nicht für die Argumente <? extends MyPojo
". Bitte beachten Sie, dass alle anderen drei Protokollzeilen ordnungsgemäß funktionieren.
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
}
}
2 Antworten
Logger.info
erhält ein String
, daher müssen Sie Ihr MyPojo
in einen String mit toString()
konvertieren:
myPojos.stream().forEach((myPojo) -> {log.info(myPojo.toString());});
Beachten Sie, dass Sie hier einen Teil der Robustheit verlieren können, da Sie nur eine Lambda-Anweisung haben:
myPojos.stream().forEach(myPojo -> log.info(myPojo.toString()));
Java 8 Lambda-Stil
myPojos.stream().forEach(log::info);
Neue Fragen
java
Java ist eine Programmiersprache auf hoher Ebene. Verwenden Sie dieses Tag, wenn Sie Probleme haben, die Sprache selbst zu verwenden oder zu verstehen. Dieses Tag wird selten alleine verwendet und wird am häufigsten in Verbindung mit [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] und [maven] verwendet.