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

平坦可映射截断

姜志
2023-03-14

我需要将一个项目列表映射到可观察的项目中,然后使用另一个函数处理每个可观察的项目flatmap,以将某个REST API调用的结果持久化到数据库中。

API调用将正确返回所有项。但是,FlatMapiteTable不会将所有项目传递给最后一个flatMap。

这是代码。

restApi.getContacts(user)
        .flatMapIterable(new Func1<List<Contact>, List<Contact>>() {
            @Override
            public List<Contact> call(List<Contact> contacts) {
                return contacts;
            }
        }

        .flatMap(new Func1<Contact, Observable<Integer>>() {
            @Override
            public Observable<Integer> call(Contact Contact) {
                return create(Contact);
            }
        })

我不想使用doOnEach或doOnNext,我的问题是关于FlatMapiteTable的行为。

知道为什么我不能到达最后一张平面图中的所有项目吗?

谢谢。

共有1个答案

景俊良
2023-03-14

首先,为了便于检查,请尝试以下内容

而不是:

    .flatMapIterable(new Func1<List<Contact>, List<Contact>>() {
        @Override
        public List<Contact> call(List<Contact> contacts) {
            return contacts;
        }
    }

试试这个:

    .flatMap(new Func1<List<Contact>, Observable<Contact>>() {
        @Override
        public Observable<Contact> call(List<Contact> contacts) {
            return Observable.from(contacts);
        }
    })

如果没有帮助,请添加以下代码:

    restApi.getContacts(user)
        .doOnNext(new Action1<List<Contact>>() {
            @Override
            public void call(List<Contact> contacts) {
                Log.i(LOG_TAG, "first doOnNext size: " + contacts.size());
            }
        })
        .flatMapIterable(new Func1<List<Contact>, List<Contact>>() {
            @Override
            public List<Contact> call(List<Contact> contacts) {
                Log.i(LOG_TAG, "flatMapIterable size: " + contacts.size());
                return contacts;
            }
        })
        .flatMap(new Func1<Contact, Observable<Integer>>() {
            @Override
            public Observable<Integer> call(Contact Contact) {
                return create(Contact);
            }
        })
        .toList()
        .doOnNext(new Action1<List<Integer>>() {
            @Override
            public void call(List<Integer> integers) {
                Log.i(LOG_TAG, "second doOnNext size: " + contacts.size());
            }
        })

并在这里打印Logcat输出。

 类似资料:
  • 主要内容:映射拦截动作,参考Struts 2的开发者用来声明行为属于一个包,扩展 “struts-default“, 其中包含默认设置的拦截。 拦截器的默认设置进行分组为“defaultStack”在struts-default.xml文件中,它位于 struts2-core.jar 文件,“defaultStack”提供所有的核心Struts2功能,这是最适合应用的需要。 试着学习struts-default.xml文件,

  • 每次我认为我理解了可观测物,但我不太理解可观测物。所以考虑一下我在Angular 4应用程序中使用的代码: 我希望我对代码解释得足够好,所以它的本质是我不想在任何地方使用“订阅”。因为我使用异步管道,所以我希望可以一直观察到。但是,当我使用单(),然后我必须平面映射它,否则它给我一个错误,因为我不能返回可观察 如果我没有把我的问题说清楚,我很抱歉。我的场景是,我基本上需要一个配置设置,我的实际ht

  • Java 8流#findFirst()是一种短路终端操作。这意味着一旦找到元素(通常与filter()操作一起使用),它将停止生成流。 但是,我想知道它是否会在平面图创建的流上短路。即它会短路在平面图操作中创建的流。 换句话说,哪种代码更有效(在流中生成的元素更少): 示例1(使用平面图): 示例2(无平面图):

  • 我一直在尝试使用XSLT从以下xml文件中获取元素“测试”的内容,但我真的被阻止了。 您知道如何使用XSLT获取它吗 XML文件内容如下所示:

  • 我对webflux比较陌生,我想找到解决方案,在有条件时避免嵌套flatMap: 如何防止这种分支条件平面映射混乱?我无法想象如果我在项目中有另一个实体。会有更多嵌套的平面地图?

  • 我正在使用Hibernate和JPA注释来映射我的类。当hibernate尝试映射这个类时,我遇到了一个问题 我的Social alStat类是: 我得到了这个错误: 我猜发生这种情况是因为我试图映射到一个基本类,但@ElementCollection注释不应该解决这个问题吗? 我的item类如下所示: