gpt4 book ai didi

java - 按属性匹配两个无序流,RxJava,RxAndroid

转载 作者:太空宇宙 更新时间:2023-11-04 12:07:59 26 4
gpt4 key购买 nike

有两个如下所示的流

Stream 1: A -- B -- C -- D
Stream 2: 3 -- 1 -- 2 -- 4

我要输出

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

或者

Output: 3C -- 2B -- 1A -- 4D

每个字母都与其在字母表中的位置相匹配。我尝试使用运算符 .zip.combineLatest 但没有得到我正在寻找的结果。

实际上,这实际上是我的问题的简化。 A、B 和 C 是具有 1,2 或 3 等属性的对象。因此我可以执行类似 A.position() = 1

的操作

是否有专门解决我的问题的运算符,或者我必须使用 HashMap 并自己匹配这些对象?

提前致谢。

最佳答案

使用 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
});

比较方法:

private Integer compare(Data a, Data b) {
return a.number.equals(b.number) ? 0 : (a.number < b.number ? -1 : 1);
}

数据类:

class Data {
private final Integer number;

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

关于java - 按属性匹配两个无序流,RxJava,RxAndroid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40168659/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com