Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按属性RxJava和RxAndroid匹配两个无序流_Java_Android_Rx Java - Fatal编程技术网

按属性RxJava和RxAndroid匹配两个无序流

按属性RxJava和RxAndroid匹配两个无序流,java,android,rx-java,Java,Android,Rx Java,有如下两条溪流的 Stream 1: A -- B -- C -- D Stream 2: 3 -- 1 -- 2 -- 4 我想要输出 Output: A1 -- B2 -- C3 -- D4 或 每个字母与字母表上的位置相匹配。 我尝试使用操作符.zip和.combinelatetest,但没有得到我想要的结果 实际上,这是对我的问题的简化。A、 B和C是具有类似于1、2或3的属性的对象。所以我可以做一些类似于A.position()=1 是否有专门解决我的问题的操作符,或者我必须使用哈

有如下两条溪流的

Stream 1: A -- B -- C -- D
Stream 2: 3 -- 1 -- 2 -- 4
我想要输出

Output: A1 -- B2 -- C3 -- D4

每个字母与字母表上的位置相匹配。 我尝试使用操作符
.zip
.combinelatetest
,但没有得到我想要的结果

实际上,这是对我的问题的简化。A、 B和C是具有类似于1、2或3的属性的对象。所以我可以做一些类似于
A.position()=1

是否有专门解决我的问题的操作符,或者我必须使用哈希映射并自己匹配这些对象


提前感谢。

使用
可观察。toSortedList
如下所示:

Observable<Data> s1 = Observable.from(new Data[]{new Data(3), new Data(1), new Data(2), new Data(4)});
Observable<String> s2 = Observable.from(new String[]{"A", "B", "C", "D"});

Observable.zip(
        s1.toSortedList(this::compare).flatMap(Observable::from),
        s2,
        (d, s) -> s + d.number
).subscribe(s -> {
    //Output: A1 -- B2 -- C3 -- D4
});
数据
类别:

class Data {
    private final Integer number;

    Data(Integer number) {
        this.number = number;
    }
}

使用
Observable.toSortedList
如下所示:

Observable<Data> s1 = Observable.from(new Data[]{new Data(3), new Data(1), new Data(2), new Data(4)});
Observable<String> s2 = Observable.from(new String[]{"A", "B", "C", "D"});

Observable.zip(
        s1.toSortedList(this::compare).flatMap(Observable::from),
        s2,
        (d, s) -> s + d.number
).subscribe(s -> {
    //Output: A1 -- B2 -- C3 -- D4
});
数据
类别:

class Data {
    private final Integer number;

    Data(Integer number) {
        this.number = number;
    }
}

我会在一个流上尝试类似.flatMap()的东西,在另一个流上尝试.groupBy(key),这将产生可观察的结果

或者在另一个流上使用.toMap()或.toMultimap(),这将产生可观察的


不确定您是否期望特定的顺序

我会在一个流上尝试类似.flatMap()的东西,在另一个流上尝试.groupBy(key),这将产生可观察的结果

或者在另一个流上使用.toMap()或.toMultimap(),这将产生可观察的


不确定是否需要特定的订单

您可以使用rxjava extras 0.8.0.3(或更高版本,如果可用)中的单元测试运算符。该工件发布在Maven Central上

将此添加到pom.xml中:

<dependency>
  <groupId>com.github.davidmoten</groupId>
  <artifactId>rxjava-extras</artifactId>
  <version>0.8.0.3</version>
</dependency>

您可以使用rxjava extras 0.8.0.3(或更高版本,如果可用)中的单元测试运算符。该工件发布在Maven Central上

将此添加到pom.xml中:

<dependency>
  <groupId>com.github.davidmoten</groupId>
  <artifactId>rxjava-extras</artifactId>
  <version>0.8.0.3</version>
</dependency>

什么是.zip和.cimbineLatest运算符?它们是反应式运算符感谢您对问题的简单抽象,这是一个很好的改变!顺便提一句,这是一个有趣的问题,特别是处理无限流和很好地处理背压(可能不是您的用例,但仍然很有趣)。在您的第二个输出选项中,
1A
应该在
2B
之前。zip和.cimbinetest运算符是什么?它们是被动运算符。感谢您对问题的简单抽象,这是一个很好的更改!顺便提一下,这是一个有趣的问题,特别是在处理无限流和很好地处理背压方面(可能不是您的用例,但仍然很有趣)。在您的第二个输出选项中,
1A
应该在
2B
之前,我可能在回答中选择了一个不好的示例,但是“toSortedList”不适用于我的Porpus流s1包含ID对象,而不是数字。我将重新编写我的答案,使其更通用。我可能在答案中选择了一个不好的示例,但“toSortedList”对我的Porpus不起作用,因为流s1包含ID对象,而不是数字对象。我将重新编写我的答案,使其更加通用。请注意,我只是在rxjava extras中完成一个经过单元测试的操作符
match
。上述算法无法正确处理重复。我会让你知道什么时候准备好,将在未来几天发布。用新编写的操作员替换我的答案。如果有任何问题,请告诉我(最好是作为github上rxjava extras的问题)。请注意,我只是在rxjava extras中完成一个经过单元测试的操作符
匹配。上述算法无法正确处理重复。我会让你知道什么时候准备好,将在未来几天发布。用新编写的操作员替换我的答案。如果有任何问题,请告诉我(最好是作为github上rxjava extras的问题)。
1
2
4
3