【问题标题】:How to process list of monos one by one?如何一一处理单声道列表?
【发布时间】:2020-03-17 07:36:13
【问题描述】:

我有一个列表

List<Tuple3<Object1, Mono<List<Object2>>, Mono<List<Object3>>>>

我需要写一个带有签名的方法

private Mono<Dto> buildDto(List<Tuple3<Object1, Mono<List<Object2>>, Mono<List<Object3>>>> tuples) {...}

我怎样才能在tuples列表中的所有项目一个接一个地获得Object1、Object2、Object3的值而不跳过任何一个?

我尝试执行

AtomicReference<Dto> dtoAtomic = new AtomicReference<>(buildEmptyDto());
return tuples.stream()
         .map(tuple3 -> {
             return Mono.zip(tuple3.getT2(), tuple3.getT3(),
                             (object2, object3) -> {
                                 Dto dto = dtoAtomic.get();

                                 dtoAtomic.set(dto);
                                 return dto;
                             });
         })
         .collect(Collectors.toList())
         .stream()
         .findFirst()
         .orElse(Mono.just(dtoAtomic.get()))

但是只能获取一个 Mono.zip(...) 但我需要获取所有的元组。

【问题讨论】:

  • .findFirst() 做什么?必须尝试删除.findFirst() ??
  • 否则无法从流中获取部分元素
  • 为什么需要使用stream()
  • 什么是 dto 和 Dto?它们是否与 Object1、Object2、Object3、object2、object3 有某种关系。从代码sn-p看不清楚。

标签: java reactive-programming project-reactor


【解决方案1】:

使用Flux.fromIterable(tuples)解决

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-05
    • 2014-01-30
    • 1970-01-01
    相关资源
    最近更新 更多