«1. Введение

Cactoos — это библиотека объектно-ориентированных примитивных типов Java.

В этом уроке мы рассмотрим некоторые классы, доступные как часть этой библиотеки.

2. Cactoos

Репертуар библиотеки Cactoos довольно богат, начиная от манипуляций со строками и заканчивая структурами данных. Примитивные типы и соответствующие им методы, предлагаемые этой библиотекой, аналогичны тем, которые предоставляются другими библиотеками, такими как Guava и Apache Commons, но больше ориентированы на принципы объектно-ориентированного проектирования.

2.1. Сравнение с Apache Commons

Библиотека Cactoos оснащена классами, которые обеспечивают ту же функциональность, что и статические методы, являющиеся частью библиотеки Apache Commons.

Давайте рассмотрим некоторые из этих статических методов, которые являются частью пакета StringUtils, и их эквивалентные классы в Cactoos:

Static method of StringUtils  Equivalent Cactoos class
isBlank() IsBlank
lowerCase() Lowered
upperCase() Upper
rotate() Rotated
swapCase() SwappedCase
stripStart() TrimmedLeft
stripEnd() TrimmedRight

Дополнительную информацию об этом можно найти в официальной документации. Мы рассмотрим реализацию некоторых из них в следующем разделе.

3. Зависимость Maven

Давайте начнем с добавления необходимой зависимости Maven. Последнюю версию этой библиотеки можно найти на Maven Central:

<dependency>
    <groupId>org.cactoos</groupId>
    <artifactId>cactoos</artifactId>
    <version>0.43</version>
</dependency>

4. Строки

В Cactoos есть широкий набор классов для управления объектом String.

4.1. Создание объекта String

Давайте посмотрим, как можно создать объект String с помощью класса TextOf:

String testString = new TextOf("Test String").asString();

4.2. Форматированная строка

В случае, если необходимо создать форматированную строку, мы можем использовать класс FormattedText:

String formattedString = new FormattedText("Hello %s", stringToFormat).asString();

Давайте проверим, что этот метод действительно возвращает форматированную строку:

StringMethods obj = new StringMethods();

String formattedString = obj.createdFormattedString("John");
assertEquals("Hello John", formattedString);

4.3. Строки нижнего/верхнего регистра

Класс Lowered преобразует строку в нижний регистр с помощью своего объекта TextOf:

String lowerCaseString = new Lowered(new TextOf(testString)).asString();

Точно так же заданная строка может быть преобразована в верхний регистр с помощью класса Upper:

String upperCaseString = new Upper(new TextOf(testString)).asString();

~ ~~ Давайте проверим выходные данные этих методов с помощью тестовой строки:

StringMethods obj = new StringMethods();

String lowerCaseString = obj.toLowerCase("TeSt StrIng");
String upperCaseString = obj.toUpperCase("TeSt StrIng"); 

assertEquals("test string", lowerCaseString);
assertEquals("TEST STRING", upperCaseString);

4.4. Проверка на пустую строку

Как обсуждалось ранее, библиотека Cactoos предоставляет класс IsBlank для проверки нулевой или пустой строки:

new IsBlank(new TextOf(testString)) != null;

5. Коллекции

Эта библиотека также предоставляет несколько классов для работы с коллекциями. Давайте взглянем на некоторые из них.

5.1. Перебор коллекции

Мы можем перебрать список строк, используя служебный класс И:

new And((String input) -> LOGGER.info(new FormattedText("%s\n", input).asString()), strings).value();

Вышеупомянутый метод представляет собой функциональный способ перебора списка строк, который записывает выходные данные в регистратор.

5.2. Фильтрация коллекции

Класс Filtered можно использовать для фильтрации коллекции на основе определенных критериев:

Collection<String> filteredStrings 
  = new ListOf<>(new Filtered<>(string -> string.length() == 5, new IterableOf<>(strings)));

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

CollectionUtils obj = new CollectionUtils(); 

List<String> strings = new ArrayList<String>() {
    add("Hello"); 
    add("John");
    add("Smith"); 
    add("Eric"); 
    add("Dizzy"); 
};

int size = obj.getFilteredList(strings).size(); 

assertEquals(3, size);

~ ~~ Некоторые другие классы для коллекций, предоставляемые этой библиотекой, можно найти в официальной документации.

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

В этом уроке мы рассмотрели библиотеку Cactoos и некоторые классы, которые она предоставляет для манипулирования строками и структурами данных.

В дополнение к этому библиотека также предоставляет другие служебные классы для операций ввода-вывода, а также дату и время.

Как обычно, образцы кода, используемые в этом руководстве, доступны на GitHub.