1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-cactoos

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Проект Cactoos

Логотип: logo

Принципы проекта:

EO principles respected here

DevOps By Rultor.com

We recommend IntelliJ IDEA

Инструменты и ресурсы:

mvn

Javadoc

PDD status

Maven Central

License

Test Coverage

SonarQube

Hits-of-Code

Codacy Badge

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

Мотивация. Мы недовольны JDK, Guava и Apache Commons, потому что они процедурные, а не объектно-ориентированные. Они выполняют свою работу, но в основном через статические методы. Cactoos предлагает делать почти то же самое, но через объекты.

Принципы. Это принципы проектирования, лежащие в основе Cactoos.

Использование. У библиотеки нет зависимостей. Всё, что вам нужно, это (получите последнюю версию здесь):

Maven:

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

Gradle:

dependencies {
  compile 'org.cactoos:cactoos::0.55.0
}

Требуется версия Java 1.8+.

Тег StackOverflow — cactoos.

Ввод/вывод

Подробнее здесь: Объектно-ориентированный декларативный ввод/вывод в Cactoos.

Чтобы прочитать текстовый файл в UTF-8:

String text = new TextOf(
  new File("/code/a.txt")
).asString();

Чтобы записать текст в файл:

new LengthOf(
  new TeeInput(
    "Hello, world!",
    new File("/code/a.txt")
  )
).value();

Чтобы считать двоичный файл из classpath:

byte[] data = new BytesOf(
  new ResourceOf("foo/img.jpg")
).asBytes();

Текст/строки

Чтобы отформатировать текст:

String text = new FormattedText(
  "How are you, %s?",
  name
).asString();

Чтобы манипулировать текстом:

// Чтобы перевести в нижний регистр
new Lowered(
    new TextOf("Hello")
);
// Чтобы перевести в верхний регистр
new Upper(
    new TextOf("Hello")
);

Итерации/коллекции/списки/наборы

Подробнее здесь: Ленивая загрузка и кэширование с помощью липких примитивов Cactoos.

Чтобы фильтровать коллекцию:

Collection<String> filtered = new ListOf<>(
  new Filtered<>(
    s -> s.length() > 4,
    new
``` ИтераблОф<>("привет", "мир", "чувак")  
);  

Чтобы сгладить один итерабельный:

новый Объединённый<>(  
  новый Отображенный<ИтераблОф>(  
    итер -> новый ИтераблОф<>(  
      новый СписокОф<>(итер).toArray(новое Целое число[]{})  
    ),  
    новый ИтераблОф<>(1, 2, 3, 4, 5, 6)  
  )  
);    // Итерабл<Целое число>

Чтобы сгладить и объединить несколько итерабельных:

новый Объединенный<>(  
  новый Отображенный<ИтераблОф>(  
    итер -> новый ИтераблОф<>(  
      новое Объединение<>(итер)  
    ),  
    новое Объединение<>(  
      новый ИтераблОф<(новый ИтераблОф<>(1, 2, 3)),  
      новый ИтераблОф<(новый ИтераблОф<>(4, 5, 6))  
    )  
  )  
);    // Итерабл<Целое число>  

Чтобы перебрать коллекцию:

новое И(&)(  
  новое Отображенное<>(  
    новая ФункцияОф<>(  
      ввод -> {  
        Система.out.printf("Элемент: %s\n", ввод);  
      },  
      новая Правда()  
    ),  
    новый ИтераблОф<>("как", "являются", "вы", "?")  
  )  
).значение();  

Или еще более компактно:

новое Для каждого<Строка>(  
  ввод -> Система.out.printf(  
    "Элемент: %s\n", ввод  
  )  
).exec(новый ИтераблОф("как", "являются", "вы", "?"));  

Чтобы отсортировать список слов в файле:

Список<Текст> отсортированный = новый СписокОф<>(  
  новый Отсортированный<>(  
    новое Отображенное<>(  
      текст -> новый СравнимыйТекст(текст),  
      новый Разделенный(  
        новый ТекстОф(  
          новый Файл("/tmp/names.txt")  
        ),  
        новый ТекстОф("\\s+")  
      )  
    )  
  )  
);  

Чтобы подсчитать элементы в итерабельном:

int общее количество = новое ДлинаОф(  
  новый ИтераблОф<>("как", "являются", "вы")  
).значение().intЗначение();  

Создать набор элементов, предоставив переменные аргументы:

final Набор<Строка> уникальный = новый НаборОф<Строка>(  
    "один",  
    "два",  
    "один",  
    "три"  
);  

Создать набор элементов из существующего итерабельного:

final Набор<Строка> слова = новый НаборОф<>(  
    новый ИтераблОф<>("abc", "bcd", "abc", "ccc")  
);  

Создать отсортированный итерабельный с уникальными элементами из существующего итерабельного:

final Итерабл<Строка> отсортированный = новый Отсортированный<>(  
    новый НаборОф<>(  
        новый ИтераблОф<>("abc", "bcd", "abc", "ccc")  
    )  
);  

Создать отсортированный набор из существующих переменных аргументов элементов с использованием компаратора:

final Набор<Строка> отсортированный = новый org.cactoos.set.Отсортированный<>(  
    (первый, второй) -> первый.compareTo(второй),  
    "abc", "bcd", "abc", "ccc", "acd"  
);  

Создать отсортированный набор из существующего итерабельного с использованием компаратора:

final Набор<Строка> отсортированный = новый org.cactoos.set.Отсортированный<>(  
    (первый, второй) -> первый.compareTo(второй),  
    новый ИтераблОф<>("abc", "bcd", "abc", "ccc", "acd")  
);  

Функции и процедуры

Это традиционный цикл foreach:

для (Строковое имя : имена) {  
  Система.out.printf("Привет, %s!\n", имя);  
}  

Его объектно-ориентированная альтернатива (без потоков!):

new И(&)(  
  n -> {  
    Система.out.printf("Привет, %s!\n", n);  
    вернуть новую Правду().значение();  
  },  
  имена  
).значение();  

Бесконечный цикл while/do:

пока (!готово) {  
  Система.out.println("Все еще жду...");  
}  

Вот его объектно-ориентированная альтернатива:

new И(&)(  
  готово -> {  
    Система.out.println("Все еще жду...");  
    вернуть !готово;  
  },  
  new Бесконечный<>(логический параметр)  
).значение();  

Даты и время

Из нашего пакета org.cactoos.time.

Наши классы разделены на две группы: те, которые анализируют строки в объекты даты/времени, и те, которые форматируют эти объекты в строки.

Например, это традиционный способ анализа строки в объект OffsetDateTime:

окончательный OffsetDateTime дата = OffsetDateTime.parse("2007-12-03T10:15:30+01:00");  

Здесь его объектно-ориентированная альтернатива (без статических вызовов методов!) с использованием OffsetDateTimeOf, который является Scalar:

окончательная дата OffsetDateTime = новая OffsetDateTimeOf("2007-12-03T10:15:30+01:00").значение();  

Для форматирования OffsetDateTime в Text:

окончательное смещение даты = ...;  
окончательная строка текста = new TextOfDateTime(дата).asString();  

Наши объекты против их статических методов

Cactoos Guava Apache Commons JDK 8
And Iterables.all() - -
Filtered Iterables.filter() ? -
FormattedText - - Перевод на русский язык
:--: :--: :--:
String.format() Строка.формат()
IsBlank StringUtils.isBlank()
Joined Строка.join()
LengthOf Строка#length()
Lowered Строка#toLowerCase()
Normalized StringUtils.normalize()
Or Iterables.any()
Repeated StringUtils.repeat()
Replaced Строка#replace()
Reversed StringBuilder#reverse()
Rotated StringUtils.rotate()
Split Строка#split()
StickyList Lists.newArrayList() ? Массивы.asList()
Sub Строка#substring()
SwappedCase StringUtils.swapCase()
TextOf ? IOUtils.toString()
TrimmedLeft StringUtils.stripStart()
TrimmedRight StringUtils.stripEnd()
Trimmed StringUtils.stripAll() Строка#trim()
Upper Строка#toUpperCase()

Вопросы

Задайте свои вопросы, связанные с библиотекой Cactoos, на Stackoverflow с тегом cactoos.

Как внести свой вклад?

Просто разветвите репозиторий и отправьте нам запрос на перенос.

Убедитесь, что ваша ветка собирается без каких-либо предупреждений или проблем:

mvn clean verify -Pqulice

Чтобы запустить сборку, аналогичную CI с Docker, используйте:

docker run \
    --tty \
    --interactive \
    --workdir=/main \
    --volume=${PWD}:/main \
    --volume=cactoos-mvn-cache:/root/.m2 \
    --rm \
    maven:3-jdk-8 \
    bash -c "mvn clean install site -Pqulice -Psite --errors; chown -R $(id -u):$(id -g) target/"

Чтобы удалить кэш, используемый сборкой на основе Docker:

docker volume rm cactoos-mvn-cache

Примечание: Checkstyle используется в качестве инструмента статического анализа кода с списком проверок в предварительных коммитах GitHub.

Участники

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/mirrors-cactoos.git
git@api.gitlife.ru:oschina-mirror/mirrors-cactoos.git
oschina-mirror
mirrors-cactoos
mirrors-cactoos
master