Перейти к основному содержимому

RxJava StringObservable

· 3 мин. чтения

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

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

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

2. Настройка Мавена

Для начала давайте включим 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 , который выдает ограниченные символами последовательности байтовых массивов:

./6dcea37b42d105a20a479d5e2f1042fd.png

от Reactivex.io , используется под лицензией 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 , который выдает закодированную или декодированную последовательность байтовых массивов или строк, поэтому мы могли бы использовать его, если нам нужно обрабатывать строки в разных кодировках:

Декодирование массива байтов 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 , который разбивает входные данные на части, выводя элементы в соответствии с шаблоном:

./4b507bf90abeaad091b50b1f9cb36161.png

от Reactivex.io

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 , выдавая одну строку с заданным разделителем.

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

./cedbf01a47bd9287da3441ef5bfb83c5.png

от Reactivex.io

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 .