当前位置: 首页 > 知识库问答 >
问题:

如何在没有列表的情况下将Uni重写为多?反应式编程

沃宇
2023-03-14

因为我在一个项目中工作,我想将Uni重写为多方法“findall”以从集合中获取所有mongob Document。我试图重写但找不到解决方案

原件:

public Uni<List<Book>> findAll(List<String> authors)
    {

        return getCollection().
                find(Filters.all("authors",authors)).map(Book::from).collectItems().asList();
}

我尝试的内容(但不起作用)

public Multi<Book> findAll(List<String> authors)

        {
    return getCollection().find(Filters.all("authors",authors)).transform().
                    byFilteringItemsWith(Objects::nonNull).onCompletion().ifEmpty().
                    failWith(new NoSuchElementException("couldn't find the Authors")).onItem().transform(Book::from);
    }

共有1个答案

慕容星晖
2023-03-14

我假设您使用的是qukus提供的ReactiveMongoClient。在这种情况下,您的方法应该是:

ReactiveMongoClient client;

public ReactiveMongoCollection<Book> getCollection() {
    return client.getDatabase("db").getCollection("books", Book.class);
}

public Multi<Book> findAll(List<String> authors) {
    return getCollection()
            .find(Filters.all("authors",authors))
            .onItem().transform(Book::from)
            .onCompletion().ifEmpty()
                 .failWith(new NoSuchElementException("..."));

}

您不需要使用FilteringItemswith执行,因为多个不能包含null项。

 类似资料:
  • 问题内容: 我刚刚开始使用Python,我想知道如何在不需要框架的情况下对Web应用程序进行编程。我是一位经验丰富的PHP开发人员,但是我有尝试Python的冲动,而且我通常喜欢从头开始编写,而没有受到flask和django等框架的限制。 问题答案: WSGI是Web服务器接口的Python标准。如果要创建自己的框架或在没有框架的情况下运行,则应进行研究。特别是,我发现Ian Bicking的D

  • 我正在尝试在没有项目编写器的情况下使用下面的配置来配置spring批处理步骤。然而,我错误地说writer元素既没有'writer'属性,也没有元素。 我浏览了链接spring批处理:没有ItemWriter的Tasklet。但无法解决问题。有人能告诉我在我提到的代码片段中要做的具体更改吗

  • 问题内容: 我有两个hibernate类:基类和具有附加字段的扩展类。(这些字段由其他表映射。) 例如,我有: 如何在Hibernate中对此进行映射?hibernate文档说明了三种类型的继承配置:每个类一个表,一个具有类型列的表和一个联接表-在此都不适用。 我之所以需要这样做,是因为类A来自通用框架,该框架已在多个项目中重用,而类B(和Node)是特定于一个项目的扩展- 不再使用。将来,我可能

  • 问题内容: 我知道Go将来不会有泛型,并且有一些建议可以用其他结构代替它们。但是在下面的例子中,我陷入了困境。 您可能会猜到,我试图使任何错误均告失败,并且希望将任何返回两个结果的函数放到第二个错误中。这工作正常,但丢失了它的类型信息,并且结果中只是一个空接口。 由于我也正在调用lib函数,因此我看不到使用Interfaces或Reflection解决此问题的方法。 有任何想法吗?我是完全走错了道

  • 问题内容: 我想在Python中实现自定义列表类作为的子类。为了获得所有列表操作的完全类型兼容性,我需要从基类中重写的最少方法集是什么? 这个问题表明至少需要重写。从进一步的研究,也和是必需的。所以我有这段代码: 下列语句即使没有覆盖方法也可以按需工作: 这些语句仅与上述类定义中的覆盖方法一起使用: 我唯一不知道如何实现的是使扩展切片返回正确的类型: 我需要在类定义中添加些什么才能获得类型? 另外

  • 我写了下面的代码来登录网站“qtpselenium.com”。 如果我将Thread.Sleep放在中间,使代码执行暂停一段时间,下面的代码就可以正常工作。如果我对thread.sleep进行注释,代码就不能按预期工作。我尝试使用selenium的隐式和显式等待来使驱动程序等待元素可见,但代码只能在使用Thread.Sleep时按预期工作。 有没有什么方法可以使下面的代码在不使用thraed.sl