如何将Java Flux列表从外部源连接到一个列表中

时间:2017-06-23 19:44:12

标签: spring-boot reactive-programming spring-webflux

在spring-boot 2.0 rest控制器中,我创建了以下代码,它可以按照需要运行:

@ResponseBody
@GetMapping("/test3")
Mono<List<String>> test3(){
    List<String> l1 = Arrays.asList("one","two","three");
    List<String> l2 = Arrays.asList("four","five","six");

    return Flux
               .concat(Flux.fromIterable(l1),Flux.fromIterable(l2))
               .collectList();
}

我的问题来自于尝试从外部数据源执行相同的操作。我创建了以下测试用例:

@ResponseBody
@GetMapping("/test4")
Flux<Object> test4(){
    List<String> indecies = Arrays.asList("1","2");
    return Flux.concat(
            Flux.fromIterable(indecies)
        .flatMap(k -> Flux.just(myRepository.getList(k))
                          .subscribeOn(Schedulers.parallel()),2
                )
        ).collectList();
}

myRepository如下:

@Repository
public class MyRepository {

List<String> l1 = Arrays.asList("one","two","three");
    List<String> l2 = Arrays.asList("four","five","six");
    Map<String, List<String>> pm = new HashMap<String, List<String>>();

MyRepository(){
    pm.put("1", l1);
    pm.put("2", l2);
}

List<String> getList(String key){
    List<String> list = pm.get(key);
    return list;
}   
}

我的代码标记为test4,给出了代码提示错误:

  

类型不匹配:无法转换为Flux&lt;列表&lt;字符串&gt;&gt;发布者&lt; ?   extends Publisher&lt; ? extends Object&gt;&gt;

所以有几个问题:

  1. 我认为Flux是出版商?那么为什么会出错?
  2. 我在测试4中做错了什么,以便输出与test3相同的结果?
  3. 预期输出为:[[“one”,“two”,“three”,“four”,“five”,“six”]]

1 个答案:

答案 0 :(得分:1)

使用M. Deinum的评论,这是有效的:

$ cd ..
$ git add strangersPro