加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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将您的对象传递到下一个阶段.对或某种类型甚至数组.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读