0
私は3要素のarraylistが "1"、 "2"、 "3"のオブザーバブルを使用しています。 2つの同様の、しかしわずかに異なる方法でそれらをテストしています。以下のコードでセクション1とセクション2と考えることができます。RxJava:観測値が重複した値を返す
各テストの結果は、3行をsysで返すと仮定しました。私はそこに一つのセクションしか残さず、他のセクションをコメントアウトすると効率的です。
しかし、両方のセクションがそこに保持されている場合、3つの値を返す代わりにセクション2が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);
}
}) ;
}
}
のSysログアウト:マークされますが、セクション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
ような何かをあなたのArturに感謝..ところでなぜ静的リストに値を保存しますか..? – Girish
これは実際に静的な問題ではなく、インスタンスフィールドでも同じことが起こります。相違点は、各クエリメソッド呼び出しで作成された新しいリストと、何かが呼び出される前に割り当てられ、呼び出し間で保持されるリスト(静的またはクラスのインスタンスフィールドが行うように)との違いです。 –