Size: a a a

ReactiveX - русскоговорящее сообщество

2020 September 22

l

lenar in ReactiveX - русскоговорящее сообщество
Evgeny GooDi
чот туплю. как это на эрыкс переписать?..
public class Example {
   public static final boolean FIRST_VALUE_IS_ACCOUNT_TYPE = false;
   public static final boolean FIRST_VALUE_IS_DEMO_USER = false;

   public static void main(String[] args) {
       Flowable<AccountType> accountTypeObs = Flowable.empty();
       Flowable<Boolean> isDemoUserObs = Flowable.empty();

       Flowable
               .combineLatest(
                       accountTypeObs
                               .map(accountType -> accountType == AccountType.type1 || accountType == AccountType.type2)
                               .startWithItem(FIRST_VALUE_IS_ACCOUNT_TYPE),
                       isDemoUserObs.startWithItem(FIRST_VALUE_IS_DEMO_USER),
                       (isAccountType, isDemoUser) -> isAccountType || isDemoUser)
               .doOnNext(Example::setFilterVisibility);

   }

   private static void setFilterVisibility(boolean val) {
       //filterLayout.setFilterVisibility(val ? View.VISIBLE : View.DONE);
   }
}

enum AccountType { type1, type2, type3, type4, type5 }
источник

EG

Evgeny GooDi in ReactiveX - русскоговорящее сообщество
lenar
public class Example {
   public static final boolean FIRST_VALUE_IS_ACCOUNT_TYPE = false;
   public static final boolean FIRST_VALUE_IS_DEMO_USER = false;

   public static void main(String[] args) {
       Flowable<AccountType> accountTypeObs = Flowable.empty();
       Flowable<Boolean> isDemoUserObs = Flowable.empty();

       Flowable
               .combineLatest(
                       accountTypeObs
                               .map(accountType -> accountType == AccountType.type1 || accountType == AccountType.type2)
                               .startWithItem(FIRST_VALUE_IS_ACCOUNT_TYPE),
                       isDemoUserObs.startWithItem(FIRST_VALUE_IS_DEMO_USER),
                       (isAccountType, isDemoUser) -> isAccountType || isDemoUser)
               .doOnNext(Example::setFilterVisibility);

   }

   private static void setFilterVisibility(boolean val) {
       //filterLayout.setFilterVisibility(val ? View.VISIBLE : View.DONE);
   }
}

enum AccountType { type1, type2, type3, type4, type5 }
о! спасибо. а что делает .startWithItem ?
источник

l

lenar in ReactiveX - русскоговорящее сообщество
Evgeny GooDi
о! спасибо. а что делает .startWithItem ?
значение до самого потока. нужно, например, для случая когда первое значение в потоке будет через какое то время. но нужно оно раньше
источник
2020 September 28

НП

Непредставимый Пхы... in ReactiveX - русскоговорящее сообщество
Привет всем: есть ли какой-то общий паттерн, если нужно построить DTO с, условно, десятком полей, где каждое поле надо вытащить из паблишера.

У меня есть пока две версии и каждая хуже другой:
1) либо предварительно все поля закешировать в HashMap, а потом конструикровать выходной объект
2) длинная портянка из пары .zipWith() и .map() для настройки каждого поля
источник

АК

Артем Кулик... in ReactiveX - русскоговорящее сообщество
.combineLatest() .zip(SingleSource...)
источник

НП

Непредставимый Пхы... in ReactiveX - русскоговорящее сообщество
немного потыкал, это кажется не лучшим способом
Ведь внутри комбинатора вылезут явные касты. Да и с вложенными структурами становится больно.

Вариант закешировать все в мапу кажется более читабельным внезапно
источник

АК

Артем Кулик... in ReactiveX - русскоговорящее сообщество
помойму тебе идеально подходит зип для того чтобы собрать все источники в 1 функцию
источник

АК

Артем Кулик... in ReactiveX - русскоговорящее сообщество
и когда все готовы - собрать ответ
источник

АК

Артем Кулик... in ReactiveX - русскоговорящее сообщество
источник

НП

Непредставимый Пхы... in ReactiveX - русскоговорящее сообщество
Да, с <9 источниками это смотрится весьма неплохо

А вот, когда их уже за 10, там возникает комбинатор, который Function<Object[], R> combinator
И все смотрится уже не так гладко :(
источник

НП

Непредставимый Пхы... in ReactiveX - русскоговорящее сообщество
И я не знаю, стоит ли жертвовать читаемостью ради идеоматичности кода
источник

АК

Артем Кулик... in ReactiveX - русскоговорящее сообщество
заверни 9 классов в мап датакласса
источник

АК

Артем Кулик... in ReactiveX - русскоговорящее сообщество
если у тебя зип 10+ элементов я бы подумал почему так)))
источник

НП

Непредставимый Пхы... in ReactiveX - русскоговорящее сообщество
Я думал. Но это дтоха, которая улетает на фронт с текстовками
А текстовки приходят из стороннего сервиса
источник

АК

Артем Кулик... in ReactiveX - русскоговорящее сообщество
но что мешает объеденить несколько синглов в 1 тоже зипом в датакласс
источник

АК

Артем Кулик... in ReactiveX - русскоговорящее сообщество
и собери дто из 2-3 датаклассов
источник

НП

Непредставимый Пхы... in ReactiveX - русскоговорящее сообщество
То есть танцевать вокруг этого ограничения в 8 полей в одном дата-классе?
Интересно, что за магическая цифра вообще, что не стали имплементить всякие Tuple9 и далее
источник

НП

Непредставимый Пхы... in ReactiveX - русскоговорящее сообщество
В любом случае. спасибо большое за совет
источник

АК

Артем Кулик... in ReactiveX - русскоговорящее сообщество
вроде в джаве ограничение на кол-во параметров в методе
источник

НП

Непредставимый Пхы... in ReactiveX - русскоговорящее сообщество
255
источник