Rx java RxJava:可观察到的重复值

Rx java RxJava:可观察到的重复值,rx-java,Rx Java,我使用的是3个元素“一”、“二”和“三”的阵列列表中的可观测值。我用两种相似但略有不同的方式测试它们。在下面的代码中,您可以将它们视为第1节和第2节。 每个测试的结果应返回3条线至sys out。如果我只保留一个部分并注释掉另一个部分,那么它会非常有效 但是,我无法理解,如果两个部分都保留在那里,那么第2部分将返回6个值,而不是返回3个值 不知何故,它受到上一次运行(第1节)的影响,但不确定如何影响。我试图取消订阅first observable,但它没有解决问题 请检查,如果你能找出我在这段代

我使用的是3个元素“一”、“二”和“三”的阵列列表中的可观测值。我用两种相似但略有不同的方式测试它们。在下面的代码中,您可以将它们视为第1节和第2节。 每个测试的结果应返回3条线至sys out。如果我只保留一个部分并注释掉另一个部分,那么它会非常有效

但是,我无法理解,如果两个部分都保留在那里,那么第2部分将返回6个值,而不是返回3个值

不知何故,它受到上一次运行(第1节)的影响,但不确定如何影响。我试图取消订阅first observable,但它没有解决问题

请检查,如果你能找出我在这段代码中到底遗漏了什么

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


            }

        }

你有一个静态列表。您要向它添加两次(每次查询调用中添加一个),所以在第二次运行期间,您有两倍数量的元素

而不是

        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 List=new ArrayList();
静态可观察查询(字符串文本)
{
列表。添加(“一”);列表。添加(“两”);列表。添加(“三”);
可观察的结果=可观察的结果(列表);
返回结果;
}
做点像

        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 ;
        }
静态可观察查询(字符串文本)
{
列表=新的ArrayList();
列表。添加(“一”);列表。添加(“两”);列表。添加(“三”);
可观察的结果=可观察的结果(列表);
返回结果;
}

谢谢Artur..,顺便问一下,为什么静态列表会保留这些值?这实际上不是一个静态的问题,同样的情况也会发生在实例字段中。区别在于在每个查询方法调用上创建新列表和在调用之前分配并在调用之间保留的列表(类上的静态或实例字段将这样做)。
        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 ;
        }