RxJava - Just vs From
Я получаю такой же вывод при использовании Observable.just
против Observable.from
в следующем случае:
public void myfunc() {
//swap out just for from here and i get the same results,why ?
Observable.just(1,2,3).subscribe(new Subscriber<Integer>() {
@Override
public void onCompleted() {
Log.d("","all done. oncompleted called");
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Integer integer) {
Log.d("","here is my integer:"+integer.intValue());
}
});
}
Я думал, что just
предполагать, чтобы испустить один элемент, а from
- в какой-то список. Какая разница? Я также отметил, что как just
и from
принимает лишь ограниченное количество аргументов. поэтому Observable.just(1,2,3,4,5,6,7,8,-1,-2)
в порядке, но Observable.just(1,2,3,4,5,6,7,8,-1,-2,-3)
не удается. То же самое касается, я должен обернуть его в список или массив сортов. Мне просто любопытно, почему они не могут определить неограниченные аргументы.
ОБНОВЛЕНИЕ: я экспериментировал и видел, что just
не принимает структуру массива, он just
принимает аргументы. from
берет коллекцию. поэтому следующее работает from
но не just
:
public Observable myfunc() {
Integer[] myints = {1,2,3,4,5,6,7,8,-1,-2,9,10,11,12,13,14,15};
return Observable.just(myints).flatMap(new Func1<Integer, Observable<Boolean>>() {
@Override
public Observable<Boolean> call(final Integer integer) {
return Observable.create(new Observable.OnSubscribe<Boolean>() {
@Override
public void call(Subscriber<? super Boolean> subscriber) {
if(integer.intValue()>2){
subscriber.onNext(integer.intValue()>2);
}
}
});
}
});
}
Я предполагаю, что это будет явной разницей, верно?
Ответы
Ответ 1
Разница должна быть более четкой, когда вы смотрите на поведение каждого, когда вы передаете ему Iterable
(например, List
):
Observable.just(someList)
даст вам 1 эмиссию - List
.
Observable.from(someList)
даст вам N выбросов - каждый элемент в списке.
Возможность передачи нескольких значений just
удобна; следующие функционально одинаковы:
Observable.just(1, 2, 3);
Observable.from(1, 2, 3);
Ответ 2
Разница между just()
и from()
:
Все, хотя just()
и from()
похоже, выполняют одну и ту же работу, она отличается количеством выбросов.
just()
- Делает только 1 эмиссию. Observable.just(new Integer[]{1, 2, 3})
делает одно излучение с обратным onNext(Integer[] integers)
Observer, как onNext(Integer[] integers)
fromArray()
- производит выбросы N. Observable.fromArray(new Integer[]{1, 2, 3})
производит три излучения с обратным onNext(Integer integer)
Observer, как onNext(Integer integer)
Ответ 3
Оператор inRxJava Just() принимает список аргументов и преобразует элементы в наблюдаемые элементы. Он принимает аргументы от одного до десяти (но в официальном документе говорится, что от одного до девяти, может быть, для конкретного языка).
В отличие от just, From() создает Observable из набора элементов, используя Iterable, что означает, что каждый элемент испускается по одному за раз.
Ответ 4
from
работ в основном с структурами данных (массивами и итерабельными) и фьючерсами, поэтому полученный Observable
будет выделять отдельные элементы из этих структур данных или фьючерсов.
just
обрабатывает все как элемент, независимо от того, является ли это элементом массива или целым элементом. Путаница вокруг just
порождаются тем, что есть несколько just
варианты, которые могут принять до 10 аргументов.
Таким образом, на самом деле вы можете интерпретировать все те just
варианты, как они испускают, соответственно, "просто" один элемент или "просто" два элемента, "просто" три элемента и так далее...
Ответ 5
Мы можем передать максимум 10 аргументов в just(), в то время как fromArray имеет тип списка.
В то время как внутри просто() вызывается fromArray().
Проверьте ниже код RxJava только для 4 аргументов.
public static <T> Observable<T> just(T item1, T item2, T item3, T item4) {
ObjectHelper.requireNonNull(item1, "The first item is null");
ObjectHelper.requireNonNull(item2, "The second item is null");
ObjectHelper.requireNonNull(item3, "The third item is null");
ObjectHelper.requireNonNull(item4, "The fourth item is null");
return fromArray(item1, item2, item3, item4);
}
Оба возвращают один и тот же наблюдаемый объект.