Java 8 Streams可以使用映射管道中的多个项目
发布时间:2020-12-15 04:38:35 所属栏目:Java 来源:网络整理
导读:我有一些数据存储在我试图处理的JPA存储库中.我希望能够使用 Java 8 Streams这样做,但无法弄清楚如何获取所需的信息.这个特定的“实体”实际上仅用于恢复,因此它包含需要在电源故障/重启之后处理的项目. 使用pre-Java 8 for循环,代码看起来像: ListMyEntity
我有一些数据存储在我试图处理的JPA存储库中.我希望能够使用
Java 8 Streams这样做,但无法弄清楚如何获取所需的信息.这个特定的“实体”实际上仅用于恢复,因此它包含需要在电源故障/重启之后处理的项目.
使用pre-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()); } 问题产生于最后调用的两个参数方法.使用Streams,我相信我会这样做: // 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).但是我认为这个问题出现了很多,因此我的问题是:总的来说,有没有办法使用Streams来完成我想要做的事情? 解决方法
为什么不在地图操作上返回一对:
.map(i -> new Pair<>(i.getData(),i.getId())) .map(pair -> new Pair<>(objectMapper.readValue(pair.getLeft(),MyEventClass.class),pair.getRight()) .forEach(p -> processDelete(pair.getLeft(),pair.getRight())) 我没有编译它,因此可能需要修复一些小问题.但总的来说,在这种情况下,您需要一个Holder将您的对象传递到下一个阶段.对或某种类型甚至数组. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |