代码之家  ›  专栏  ›  技术社区  ›  Iliya Mashin

iterable(rxJava)的.zip问题

  •  0
  • Iliya Mashin  · 技术社区  · 6 年前

    我有四个可观察的代码。我申请 Observable.zip

    Observable<Currencies> usd = CoinMarket.getMarketApi().getCurrencies();
        Observable<Currencies> rub = CoinMarket.getMarketApi().getCurrencies("RUB");
        Observable<Currencies> eur = CoinMarket.getMarketApi().getCurrencies("EUR");
        Observable<Currencies> btc = CoinMarket.getMarketApi().getCurrencies("BTC");
    
        List<Observable<Currencies>> singles = new ArrayList<>();
        singles.add(usd);
        singles.add(rub);
        singles.add(eur);
        singles.add(btc);
    
        Observable<Currencies> c = Observable.zip(singles, new Function<Currencies[], Currencies>() {
                    @Override
                    public Currencies apply(@NotNull Currencies[] objects) throws Exception {
                        return ramming(objects);
                    }
                });
    

    但我有个错误:

    enter image description here

    消息说找不到具有这样一个签名的方法(可能我说的不对),但是我转到声明,查看签名是否合适。

     public static <T, R> Observable<R> zip
     (Iterable<? extends ObservableSource<? extends T>> sources,
     Function<? super Object[], ? extends R> zipper)
    

    我做错了什么?

    RxJava2Iterableisbroken

    2 回复  |  直到 6 年前
        1
  •  6
  •   akarnokd    6 年前

    不是虫子。你需要一个 Function<? super Object[] 由于Java的泛型限制。本文也对此进行了解释 the Javadocs of zips

    Observable<Currencies> usd = CoinMarket.getMarketApi().getCurrencies();
    Observable<Currencies> rub = CoinMarket.getMarketApi().getCurrencies("RUB");
    Observable<Currencies> eur = CoinMarket.getMarketApi().getCurrencies("EUR");
    Observable<Currencies> btc = CoinMarket.getMarketApi().getCurrencies("BTC");
    
    List<Observable<Currencies>> singles = new ArrayList<>();
    singles.add(usd);
    singles.add(rub);
    singles.add(eur);
    singles.add(btc);
    
    Observable<Currencies> c = Observable.zip(singles, new Function<Object[], Currencies>() {
                @Override
                public Currencies apply(@NotNull Object[] objects) throws Exception {
                    Currencies[] currencies = new Currencies[objects.length];
                    for (int i = 0; i < objects.length; i++) {
                         currencies[i] = (Currencies)objects[i];
                    }
                    return ramming(currencies);
                }
            });
    
        2
  •  0
  •   karandeep singh    6 年前