gpt4 book ai didi

java - 使用 Lagom 框架获取列表

转载 作者:行者123 更新时间:2023-12-02 13:19:04 24 4
gpt4 key购买 nike

我对 Lagom 框架非常陌生,我完全不知道自己在做什么。我有一个简单的 CRUD lagom 应用程序,可以正常工作,但我不知道如何检索列表。

这就是我现在所拥有的,但我正在得到

@Override
public ServiceCall<NotUsed, Source<Movie, ?>> getMovies() {
return request -> {
CompletionStage<Source<Movie, ?>> movieFuture = session.selectAll("SELECT * FROM movies")
.thenApply(rows -> rows.stream()
.map(row -> Movie.builder()
.id(row.getString("id"))
.name(row.getString("name"))
.genre(row.getString("genre"))
.build()));
//.thenApply(TreePVector::from));
//.thenApply(is -> is.collect(Collectors.toList()))

return movieFuture;
};
}

但我得到了 [Java] Type mismatch: cannot convert from Stream<Object> to Source<Movie,?> rows.stream() 上的错误线。

如有任何帮助,我们将不胜感激。

提前致谢。

最佳答案

看起来返回类型应该是 Source (来自 Akka Reactive Streams)但是您正在构建 Java 8 Stream .

如果使用 select 就可以轻松解决问题而不是selectAll查询数据库时。拉 Gorm 的CassandraSession提供了两种查询数据库的方法: (1) select(...)将立即返回 Source<Row,NotUsed>这是 react 流或 (2) selectAll(...)它将收集内存中的所有行并返回 List<Row> 。后者可能会导致您的服务器停机,因为它会尝试将所有信息放入内存中。前者将使用 react 流来交付使速度适应您的消费端速度(反压)的项目,从而保持非常低的内存占用。

您的代码可以重写为:

 public ServiceCall<NotUsed, Source<GreetingMessage, ?>> getGreetings() {
return request ->
CompletableFuture.completedFuture(
session.select("SELECT * FROM greetings")
.map(row -> new GreetingMessage(row.getString(0)))
);
}

使用select创建 Source<> 。您可以在 Source<> 上单独映射项目使用您已经开发的 lambda。

关于java - 使用 Lagom 框架获取列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43659872/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com