Apache Commons — библиотека, которая тебе точно нужна
Apache Commons — это коллекция утилит, которую многие видели, но мало кто использует на полную. Внутри есть решения для задач, которые вы пишете руками почти в каждом проекте.
🟢StringUtils.defaultIfBlank()
Сколько раз вы писали проверку: "если строка не null, не пустая и не состоит из пробелов — используй её, иначе дефолт"?
В Commons это одна строчка. Причём работает правильно во всех граничных случаях, о которых вы можете забыть в 2 часа ночи перед релизом.
String name = StringUtils.defaultIfBlank(user.getName(), "Anonymous");
🟢BidiMap: когда HashMap уже не хватает
Представьте: у вас есть маппинг email → userId, и вам постоянно нужно искать и в одну сторону, и в другую. Обычное решение — две Map синхронизировать вручную.
В Commons есть BidiMap, который делает reverse lookup за O(1) и автоматически поддерживает консистентность.
BidiMap userIds = new DualHashBidiMap<>();
String email = userIds.getKey(12345); // обратный поиск
Идеально для кэшей, где ключ и значение равноправны.
🟢LRUMap: кэширование без библиотек
Нужен простой in-memory кэш с автоматическим вытеснением старых записей?
Commons даёт готовую LRU реализацию. Никаких зависимостей от Caffeine или Guava, никаких настроек — просто работающий кэш.
Map cache = new LRUMap<>(1000);
При превышении лимита старые элементы выбрасываются автоматически. Для 80% задач кэширования этого достаточно.
🟢FileAlterationObserver: hot reload без костылей
Хотите, чтобы приложение подхватывало изменения в конфиге без рестарта?
Commons умеет следить за файловой системой и уведомлять об изменениях. Без polling'а каждую секунду, без самописных велосипедов.
observer.addListener(new FileAlterationListenerAdaptor() {
public void onFileChange(File file) { reloadConfig(); }
});
🟢RandomStringUtils: токены и коды
Генерация случайных строк — частая задача. API токены, коды подтверждения, тестовые данные.
В Commons это решается одной строчкой, причём с выбором символов: только буквы, только цифры, алфавитно-цифровые.
String token = RandomStringUtils.randomAlphanumeric(32);
Не криптографически стойкий генератор, но для большинства бизнес-задач идеален.
🟢Bag: подсчёты без Map
Нужно считать, сколько раз встретился элемент? Обычно делают Map и вручную инкрементят счётчик.
В Commons есть Bag — структура данных специально для этого. Добавляете элементы, она сама считает.
Bag errors = new HashBag<>();
errors.add("NullPointer", 5);
int count = errors.getCount("NullPointer");
Удобно для статистики, метрик, анализа логов.
🟢WordUtils: текст для людей
Форматирование текста с переносами — казалось бы, простая задача. Но нужно учитывать границы слов, не ломать их посередине, правильно обрабатывать пробелы.
Commons делает это правильно.
String wrapped = WordUtils.wrap(longText, 80);
Для CLI-приложений, email-рассылок, генерации отчётов — везде, где текст должен выглядеть аккуратно.
📌 Commons — это не просто набор утилит. Это годы production опыта, упакованные в API. Каждый класс решает реальную проблему, с которой вы уже сталкивались или столкнётесь. И решает правильно, со всеми edge cases.
Вместо того чтобы писать в сотый раз StringHelper или FileWatcher, можно просто использовать готовое. Меньше кода, меньше багов, больше времени на бизнес-логику.
https://max.ru/javalib 🟪