我有一些数据存储在我尝试处理的JPA存储库中。我希望能够使用Java 8 Streams来做到这一点,但无法弄清楚如何获得所需的信息。这个特殊的“实体”实际上只是用于恢复,因此它包含了在电源故障/重启之类的事情之后需要处理的项目。Java 8 Streams是否可以使用映射管道中的多个项目
使用前的Java 8 for循环的代码是这样:
List<MyEntity> deletes = myEntityJpaRepository.findByDeletes();
for (MyEntity item : deletes) {
String itemJson = item.getData();
// use a Jackson 'objectMapper' already setup to de-serialize
MyEventClass deleteEvent = objectMapper.readValue(itemJson, MyEventClass.class);
processDelete(deleteEvent, item.getId());
}
的问题,从所谓的在最后两个参数的方法出现。使用流,我相信我会这样做:
// deletes.stream()
// .map(i -> i.getData())
// .map(event -> objectMapper.readValue(event, MyEventClass.class))
// .forEach(??? can't get 'id' here to invoke 2 parameter method);
我有一个解决方案(没有流),我可以住。不过,我认为这个问题会出现很多,因此我的问题是:总的来说,是否有使用Streams来完成我想要做的事情的方法?
对不起,我错过了关于'持有人'的说明。我认为这是最好的答案。起初,我不喜欢“Pair”,因为它不会扩展(是的,我知道'Triple'),也传达了一种可能不存在的关系。持有人似乎是IMO的最佳通用解决方案。 – JoeG
@JoeG作为一个侧面说明,看看http://stackoverflow.com/questions/43973776/what-is-equivalent-to-c-sharp-select-clause-in-java-streams/43983558#43983558也为一个绝对平凡的方式... – Eugene