Смысл в RxJava?

191
14 ноября 2017, 22:41

Каждый раз когда берусь за RxJava я это забрасываю, так как не понимаю, зачем писать больше кода. Касательно Flowable Элементарный Hello world выглядит дурно, вот так мы писали раньше

System.out.print("Hi, Rx");

А сейчас такую вот дичь в 7 строк.

Flowable.just("Hi, Rx")
  .subscribe(new Consumer<String>() {
      @Override 
      public void accept(String s) {
          System.out.println(s);
  }
});

Даже если использовать лямбды, зачем вообще так делать? Неужели нельзя просто написать

System.out.println("Hi, Rx");
Answer 1

Во-первых, не надо писать дичь в 7 строк, достаточно одной:

Flowable.just("Hi, Rx").subscribe(System.out::println);

Во-вторых, не стоит ориентироваться на Hello World. Реактивное программирование придумано для сложный вещей, в сложных вещах и блистает. Попробуйте переписать в императивном стиле что-нибудь вроде

public Observable<String> send(String command) {
    return Observable.just(command)
            .doOnNext(cmd -> checkConnection())
            .map(cmd -> cmd.getBytes())
            .map(bytes -> addHeader(bytes))
            .map(bytes -> sendBytes(bytes))
            .timeout(MAX_SEND_TIMEOUT_MS, TimeUnit.MILLISECONDS)
            .map(result -> readAnswer())
            .doOnError(throwable -> disconnect())
            .retry(MAX_RETRY_COUNT)
            .subscribeOn(Schedulers.io());
}

и посчитайте количество получившихся строк. Код взят из статьи "Несколько примеров практического использования RxJava". На Хабре немало статей доходчиво объясняющих назначение RxJava.

READ ALSO
war архив в консоли windows

war архив в консоли windows

Здравствуйте! Собираю архив war в консоли windowsd:\work\Java\jdk1

202
Построение правильной кривой Безье

Построение правильной кривой Безье

Нужно сделать правильный расчёт для построения кривой БезьеКривая не должна ложиться на компоненты, а должна огибать их

254
Запустить другое окно из Main

Запустить другое окно из Main

Есть класс который запускает окно: (он работает, те

241
Spring: No such instance field

Spring: No such instance field

Существует интерфейс репозитория:

302