«1. Введение в StringObservable

Работа с последовательностями строк в RxJava может быть сложной; к счастью, RxJavaString предоставляет нам все необходимые утилиты.

В этой статье мы рассмотрим StringObservable, который содержит несколько полезных строковых операторов. Поэтому, прежде чем приступить к работе, рекомендуется сначала ознакомиться с введением в RxJava.

2. Настройка Maven

Для начала давайте включим RxJavaString в число наших зависимостей:

<dependency>
  <groupId>io.reactivex</groupId>
  <artifactId>rxjava-string</artifactId>
  <version>1.1.1</version>
</dependency>

Последняя версия rxjava-string доступна на Maven Central.

3. StringObservable

StringObservable — удобный оператор для представления потенциально бесконечной последовательности закодированных строк.

Оператор from считывает входной поток, создавая Observable, который генерирует последовательности байтовых массивов, ограниченные символами:

Reading an infinite stream

by Reactivex.io, used under CC-BY

Мы можем создать Observable прямо из InputStream, используя оператор from:

TestSubscriber testSubscriber = new TestSubscriber();
ByteArrayInputStream is = new ByteArrayInputStream("Lorem ipsum loream, Lorem ipsum lore".getBytes());
Observable<byte[]> observableByteStream = StringObservable.from(is);

// emits 8 byte array items
observableByteStream.subscribe(testSubscriber);

4. Преобразование байтов в строки

Кодирование/декодирование бесконечных последовательностей из разных наборов символов может быть выполнено с помощью операторов декодирования и кодирования.

Как следует из их названия, они просто создадут Observable, который выдает закодированную или декодированную последовательность байтовых массивов или строк, поэтому мы могли бы использовать его, если нам нужно обрабатывать строки в разных кодировках:

Декодирование байта array Observable:

TestSubscriber testSubscriber = new TestSubscriber();
ByteArrayInputStream is = new ByteArrayInputStream(
  "Lorem ipsum loream, Lorem ipsum lore".getBytes());
Observable<byte[]> byteArrayObservable = StringObservable.from(is);
Observable<String> stringObservable = StringObservable
  .decode(byteArrayObservable, StandardCharsets.UTF_8);

// emits UTF-8 decoded strings,"Lorem ipsum loream, Lorem ipsum lore"
stringObservable.subscribe(testSubscriber);

5. Разделение строк

StringObservable также имеет несколько удобных операторов для разделения строковых последовательностей: split и byLine, оба создают новый Observable, который разбивает входные данные на части и выводит элементы в соответствии с шаблоном:

TestSubscriber testSubscriber = new TestSubscriber();
Observable<String> sourceObservable = Observable.just("Lorem ipsum loream,Lorem ipsum ", "lore");
Observable<String> splittedObservable = StringObservable.split(sourceObservable, ",");

// emits 2 strings "Lorem ipsum loream", "Lorem ipsum lore"
splittedObservable.subscribe(testSubscriber);

~ ~~ 6. Соединение строк

Дополнительными операторами предыдущего раздела являются операторы join и stringConcat, которые объединяют элементы из String Observable, создавая единую строку с заданным разделителем.

Кроме того, обратите внимание, что они будут потреблять все элементы перед выводом вывода.

TestSubscriber testSubscriber = new TestSubscriber();
Observable<String> sourceObservable = Observable.just("Lorem ipsum loream", "Lorem ipsum lore");
Observable<String> joinedObservable = StringObservable.join(sourceObservable, ",");

// emits single string "Lorem ipsum loream,Lorem ipsum lore"
joinedObservable.subscribe(testSubscriber);

7. Заключение

Это краткое введение в StringObservable продемонстрировало несколько вариантов использования манипуляций со строками с использованием RxJavaString.

Примеры из этого руководства и другие примеры использования операторов StringObservable можно найти на GitHub.