RxJava 缓冲区直到更改

2023-12-26

我有一个可观察的对象,它会发出大量数据,例如

[1,1,1,2,2,2,3,3,1,1,5,5……]

在RxJava中我们可以使用直到改变() http://reactivex.io/documentation/operators/distinct.html获得一个不同的项目,直到它发生变化,结果会像

[1,2,3,1,5,……]

同样有没有办法buffer直到更改为止的项目?例如我期望像这样的输出

[[1,1,1]、[2,2,2]、[3,3]、[1,1]、[5,5]......]


您可以分享源序列,应用distinctUntilChanged到一条路径,然后将驱动buffer使用的运算符Observable指示边界:

@Test
@SuppressWarnings("unchecked")
public void test() {
    Observable.fromArray(1,1,1,2,2,2,3,3,1,1,5,5)
    .compose(bufferUntilChanged(v -> v))
    .test()
    .assertResult(
            Arrays.asList(1, 1, 1),
            Arrays.asList(2, 2, 2),
            Arrays.asList(3, 3),
            Arrays.asList(1, 1),
            Arrays.asList(5, 5)
        );
}

static final <T, K> ObservableTransformer<T, List<T>> bufferUntilChanged(
        Function<T, K> keySelector) {
    return o -> o.publish(q -> q.buffer(q.distinctUntilChanged(keySelector).skip(1)));
}

The skip(1)是因为第一个项目通过distinctUntilChanged将触发一个新的缓冲区,使第一个缓冲区为空。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RxJava 缓冲区直到更改 的相关文章

随机推荐

  • 如何禁用 FlipView 上的箭头?

    我有一个 FlipView 它工作得很好 但我想禁用滚动时淡入的 箭头 我认为这会打破键盘 鼠标用户的情况 不是吗 如果确实需要 您可以从控件模板中删除按钮
  • Android dex问题:嵌套类+最终布尔值:com.android.dex.util.ExceptionWithContext

    我正在尝试构建我的 Android 项目 但在构建步骤中遇到了这个问题 INFO UNEXPECTED TOP LEVEL EXCEPTION INFO com android dex util ExceptionWithContext I
  • 使用 C 或 C++ 从 USB 设备接收数据

    我需要所有插入的 USB 设备的列表 并让用户选择一个 让控制台应用程序接收 USB 设备发送的任何数据 然后我可以开始处理程序中的数据 我不想使用库 只想使用标准 C 函数 并且该程序应该在 Windows 98 中运行 这是一个very
  • 如何使选项菜单始终显示在屏幕上

    我需要始终在屏幕上显示选项菜单 我已经编写了在活动启动时打开选项菜单的代码 Override public void onAttachedToWindow openOptionsMenu 但是 单击屏幕上的另一个项目时 菜单会下降 我希望菜
  • 保留history.pushState ie8-9的黑客

    在大多数现代浏览器上 我可以使用 history pushState Our Work url path 显然 IE 不支持这一点 但我想知道为什么我的简单 hack 不起作用 history pushState function stat
  • 无法删除 matplotlib 在 imshow() 图周围的填充

    我正在将 matplotlib 嵌入到我的 PyQt4 GUI 中 我玩得很开心 我可以显示图像 但它在我想要删除的内容周围添加了非常厚的填充 这就是我正在做的 from PyQt4 QtCore import from PyQt QtGu
  • 使用 MethodHandle::invokeExact 作为方法引用引起的 LambdaConversionException 导致的 BootstrapMethodError

    我试图检查是否可以使用 MethodHandle invoke 或 MethodHandle invokeExact 作为接受 MethodHandle 并返回通用输出的功能接口的方法引用 我知道 invoke 和 invokeExact
  • 关于高分辨率性能计数器及其与.NET Stopwatch相关的存在的解释?

    静态内部Stopwatch在构造函数中我们可以看到下面的代码 它主要检查高分辨率性能计数器是否存在 static Stopwatch if SafeNativeMethods QueryPerformanceFrequency out Fr
  • 但是, import sklearn 仍然给我错误。下面给出更多细节。我该如何解决这个问题?

    我在 Windows 7 上使用 python3 6 之前尝试过 python3 8 来解决同样的问题 我已经安装了 joblib 0 14 0 numpy 1 17 4 scikit learn 0 22 和 scipy 1 3 3 用于
  • 导入 igraph 时出错

    在 python 中导入 igraph 时 出现错误 见下文 由于 igraph 不是 anaconda 的一部分 因此我执行了以下概述的安装步骤 libglpk 35 dylib是什么 我应该如何加载它 为什么会出现这个问题 igraph
  • Visual Studio 可扩展性,如何枚举解决方案中的项目?

    只是想加快 SDK 的使用速度 所以 我创建了自己的工具窗口 现在我想迭代当前加载的解决方案中的现有项目并在工具窗口中显示它们的名称 但不太确定枚举项目的最佳方式是什么 有什么线索吗 检查这个微软的代码 https github com M
  • 使用 OpenCV 生成鸟瞰图/顶视图

    我正在尝试从图像生成鸟瞰图 对于相机的内在特性和变形 我使用的是从驾驶模拟器中检索到的硬编码值 该模拟器的顶部安装了相机 代码的基础来自 使用 OpenCV 库学习 OpenCV 计算机视觉 第 409 页 当我在包含每行 3 个内角 每列
  • ggplot 指定分类 x r 的垂直线段的位置

    我正在绘制行数据 并为统计计算的拟合值添加了一段可信区间和一个黑点 我的问题是我想让这些线 和黑点 相对于行数据稍微移动 水平 我尝试了抖动及其所有可能的组合 结果很糟糕 因为我从不同的列中获取了 y start 和 end 的值 因此 由
  • 泛型中奇怪的嵌套结构类型

    有人可以解释一下嵌套在泛型中的结构类型的奇怪构造吗 implicit def Function1Functor R Functor type R gt new Functor type R gt 这个例子来自Scalaz库 函子 scala
  • 毫秒是python中箭头时间库的一个特性吗

    使用这种方法 arrow utcnow format YYYY MM DD HH mm ss 或者箭头中类似的东西是否可以将毫秒添加到时间中 事实上 您最多可以使用 6 位数字来表示秒的小数部分 gt gt gt now arrow utc
  • 使用正则表达式有效测试“EndsWith”

    我需要构建一个正则表达式 NET 语法 来确定字符串是否以特定值结尾 具体来说 我需要测试文件是否具有特定扩展名 或一组扩展名 我试图修复的代码使用的是 png jpg gif 在我的场景中 对于失败的匹配来说 速度非常慢 可能是由于回溯
  • 工作表、单元格和范围的默认范围是什么?

    当您仅键入 worksheets 时 默认范围 ActiveWorkbook 或 ThisWorkbook 是什么 对于那些不了解这些区别的人来说 它们非常重要 尤其是在 Excel 2013 中 当您希望在切换到不同工作簿时运行宏时 在标
  • 如何高效调试webpack应用?

    我正在尝试在我的项目中采用 webpack 开发服务器 我知道它被广泛采用 因此令我惊讶的是调试应用程序似乎非常困难 由于 webpack 默认情况下会生成一个巨大的包 因此源映射是必须的 我对他们有一个很大的问题 根据devtool模式下
  • 用索引展平嵌套列表

    给定一个任意大小的任意深度嵌套列表的列表 我想要一个对树中所有元素进行平面 深度优先的迭代器 但也具有路径索引 使得 for x y in flatten L x L y 0 y 1 y 1 That is L 1 2 3 4 5 6 7
  • RxJava 缓冲区直到更改

    我有一个可观察的对象 它会发出大量数据 例如 1 1 1 2 2 2 3 3 1 1 5 5 在RxJava中我们可以使用直到改变 http reactivex io documentation operators distinct htm