«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, который генерирует последовательности байтовых массивов, ограниченные символами:
Мы можем создать 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.