在 Java 中从 Flux<List<String>> 转换为 Mono<List<String>>

convert to Mono<List<String>> from Flux<List<String>> in Java

我有这个实体 class。

public class MyClass {

    private String category;

    private List<String> topics;

}

我正在使用具有 spring 反应性的 firestore 数据库。我正在尝试 return 控制器列表中所有类别的所有主题,但得到一个空列表 return。这是我的控制器方法。这里 'getTopics' return 一个主题列表。

 @GetMapping("/alltopics")
 public Mono<List<String>> getAllTopics() {
     List<String> topics = new ArrayList<>();
     repository.findAll().map(MyClass::getTopics).subscribe(topics::addAll);
     return Mono.just(topics);
    }

Project Reactor documentation 真不错。你想聚合一个 Flux;我建议使用 reduce(),类似

import java.util.stream.Collector;
import java.util.List;
import java.util.LinkedList;

...

@GetMapping("/alltopics")
public Mono<List<String>> getAllTopics() {
    return repository.findAll()
            .map(MyClass::getTopics)
            .reduce(new LinkedList(),
                (result, topics) -> {
                    result.addAll(topics));
                    return result;
                });
}