在 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;
});
}
我有这个实体 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;
});
}