我正在使用带有3个元素的arraylist的观察者"一个","两个"和"三"。我们以两种相似但略有不同的方式测试它们。您可以将它们视为以下代码中的第1部分和第2部分。
每个测试的结果应该通过sys out返回3行。如果我只保留一个部分并注释掉其他部分,它会有效地完成。
但是我无法理解,如果两个部分保留在那里,第2部分,而不是返回3个值将返回6个值。
不知何故,它受前一次运行(第1部分)的影响,但不确定如何。我试图取消订阅第一个可观察的,但它没有解决问题。
请检查,如果您能找到我在此代码中缺少的确切内容。
import rx.Observable;
import rx.Subscription;
import rx.functions.Func1;
import java.util.ArrayList;
import java.util.List;
public class RxJavaTest {
static List<String> list = new ArrayList() ;
static Observable<List<String>> query(String text)
{
list.add("one") ;list.add("two") ;list.add("three") ;
Observable<List<String>> results = Observable.just(list) ;
return results ;
}
public static void main(String[] args) {
Subscription subscription ;
subscription = query("Hello, World 1").subscribe(urls -> {
Observable.from(urls).subscribe(url -> System.out.println("section 1 "+url)) ;
}) ;
subscription.unsubscribe();
query("Hello, World 2")
.subscribe(urls -> {
for (String url : urls) {
System.out.println(" section 2 "+url);
}
} ) ;
}
}
系统输出日志:标记哪些记录是意外的,如果删除第1部分的代码,它将不在那里
section 1 one
section 1 two
section 1 three
section 2 one
section 2 two
section 2 three
section 2 one --duplicate
section 2 two --duplicate
section 2 three --duplicate
答案 0 :(得分:1)
你有静态列表。您要添加两次(每次调用一次),因此在第二次运行期间,您有两倍的元素。
而不是
static List<String> list = new ArrayList() ;
static Observable<List<String>> query(String text)
{
list.add("one") ;list.add("two") ;list.add("three") ;
Observable<List<String>> results = Observable.just(list) ;
return results ;
}
做类似
的事情 static Observable<List<String>> query(String text)
{
List<String> list = new ArrayList() ;
list.add("one") ;list.add("two") ;list.add("three") ;
Observable<List<String>> results = Observable.just(list) ;
return results ;
}