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

RxJava:合并2个列表,忽略列表2中缺失的项目

司寇灵均
2023-03-14


当我的应用程序处于离线状态时,远程用户可以在本地用户编辑LocalList时添加和删除远程列表中的对象。
当应用程序再次连接时,它应该同步这两个列表。
大理石图显示列表应该如何合并




例如,以下是同步前每个列表中的对象id:
远程列表: 0,1,2(已删除),3(新),4(新)
LocalList: 0,1(删除),2,3(新)

同步时,必须更改id以防止两个具有相同id的独立对象。

MergedList: 0,3,4,5(本地id 3改为5)


我正在试验RxJava,所以快速指出正确的方向会很好。合并叉组合?也许使用过滤器并向isSynced这样的对象添加一个字段?

共有1个答案

尉迟浩思
2023-03-14

单的形式获取每个列表

record Item(int id, boolean added, boolean deleted) { }

Single<List<Item>> remoteListSource = ...
Single<List<Item>> localListSource = ...

Single.<List<Item>>zip(remoteListSource, localListSource, 
(remoteList, localList) -> {

    Set<Integer> deleted = new HashSet<>();

    // collect deleted ids
    remoteList.stream()
        .filter(item -> item.deleted)
        .forEach(item -> deleted.add(item.id));
    localList.stream()
        .filter(item -> item.deleted)
        .forEach(item -> deleted.add(item.id));

    Set<Integer> duplicate = new HashSet<>();
    List<Item> result = new ArrayList<>();

    // go through both lists, ignoring deleted ids
    Stream.concat(remoteList.stream(), localList.stream())
    .filter(item -> !deleted.contains(item.id))
    .forEach(item -> {
         // id already seen?
         if (duplicate.contains(item.id)) {
             // if this is an addition, generate new item
             if (item.added) {
                 
                 item = new Item(Collections.max(duplicate) + 1, true, false);
                 duplicate.add(item.id);
                 result.add(item);
             } else {
                 // else we have an unmodified item already in result
                 // nothing to do
             }
         } else {
             // was not a duplicate, remember it
             duplicate.add(item.id);
             result.add(item);
         }
    });

    return result;
})
.subscribe(combinedList -> { /* ... */ });

 类似资料:
  • 问题内容: 我认为那应该是一个非常简单的问题。但是不知何故我无法在Google中找到答案。 假设我有2个字符串列表。第一个包含 “字符串A”和“字符串B” ,第二个包含 “字符串B”和“字符串A” (注意顺序不同)。我想用 JUnit 测试它们,以检查它们是否包含 完全相同的 字符串。 是否有任何断言可以检查忽略顺序的字符串是否相等?对于给定的示例org.junit.Assert.assertEq

  • 问题内容: 我有2个列表,每个列表大小相等,并且有兴趣将这两个列表合并并将其写入文件。 -结果列表应类似于[(1,2 ,,(2,3),(3,4),(5,5)] 之后,我希望将其写入文件。我怎样才能做到这一点? 问题答案: 文件中的结果输出为:

  • 忽略列表显示不需要处理的资源或一类规则建议。 忽略列表显示不需要处理的资源或一类规则建议。当某资源或某类型的建议不需要用户处理时,可以通过忽略或忽略该类建议功能将其显示在忽略列表。 入口:在云管平台单击左上角导航菜单,在弹出的左侧菜单栏中单击 “优化建议/安全检查/忽略列表” 菜单项,进入忽略列表页面。 恢复 当忽略列表中某资源或某规则建议需要用户关注处理时,可以使用恢复功能将其显示在建议列表。

  • 忽略列表显示不需要处理的资源或一类规则建议。 忽略列表显示不需要处理的资源或一类规则建议。当某资源或某类型的建议不需要用户处理时,可以通过忽略或忽略该类建议功能将其显示在忽略列表。 入口:在云管平台单击左上角导航菜单,在弹出的左侧菜单栏中单击 “优化建议/成本优化/忽略列表” 菜单项,进入忽略列表页面。 恢复 当忽略列表中某资源或某规则建议需要用户关注处理时,可以使用恢复功能将其显示在建议列表。

  • 你们祈求,就给你们;寻找,就寻见;叩门,就给你们开门。因为凡祈求的,就得着;寻找的,就寻见;叩门的,就给他们开门。 所以无论何事,你们愿意人怎样待你们,你们也要怎样待人,因为这就是律法和先知的道理。(MATTHEW 7:7-8,12) 列表(2) “列表是Python的苦力”,那么它或者对它能做什么呢? 在交互模式下这么操作,就看到有关它的函数或方法了。 >>> dir(list)['__add_

  • rank ▲ ✰ vote url 45 441 233 760 url 合并列表中的列表 可能重复的问题: Flattening a shallow list in Python Comprehension for flattening a sequence of sequences? 我想是不是有更好的方法 我可以用一个循环来做,但是除了这样做还有什么更cool的用一行来做的方法?我用redu