Долго валялось в закладках на SO — и пригодилось, наконец. Обычно — или уже была «в коробке» Guava с Lists.partition(), или — Apache Commons и его ListUtils.partition().
Деление на подмножества (каплю доработано относительно исходника на SO):
// https://stackoverflow.com/a/30072617
public static <T> Stream<List<T>> listPartition(@NotNull List<T> source, @Positive int length) {
requireNonNull(source, "Source list must not be null");
if (length <= 0) {
throw new IllegalArgumentException("Partitions length must be greater than zero");
}
int size = source.size();
if (size == 0) {
return Stream.empty();
}
if (size <= length) {
return Stream.of(source);
}
int fullChunks = (size - 1) / length;
return IntStream.range(0, fullChunks + 1)
.mapToObj(n -> source.subList(n * length, n == fullChunks ? size : (n + 1) * length));
}
Возникла потребность подключаться из Java приложения к брокеру RabbitMQ с использованием защищенного соединения. Приложение на Spring Boot, живёт в контейнере Docker и должно слушать два узла Rabbit параллельно.
На входе: сертификат клиентского узла — контейнер client-cert.pfx, корневой сертификат для него root-cert.crt
Открытый серверный сертификат шлюза Rabbit: выкачивается автоматически (можно подложить вручную)
Используемая версия java поддерживает форматы хранилищ и JKS, и PKCS12
Требуется: создать и положить сертификаты в Key Store (сертификаты приложения «клиентские») и Trust Store (доверенные «серверные» сертификаты). В чём разница.
Частенько в коде встречаются перечисления, дополнительно хранящие некие значения (в виде private final поля обычно).
Чтобы в дальнейшем можно было, например, при сериализации в json это значение подставлять автоматом (@JsonValue у Jackson). Тогда возникает обычно и обратная задача — десериализовать (распарсить) значение обратно в Enum (@JsonCreator у Jackson).
Вот мне и надоело копипастить туда-сюда все эти методы (сериализации/десериализации) между классами Enum. Решил сделать один раз утилитный метод и в проекте им пользоваться. Благо, время позволило.
Не Литкодом единым, как говорится! Нашёл на диске пару задачек с HackerRank — видимо, показались тогда особо любопытными, и были сохранены.
Впрочем, и сейчас они выглядят интересно. Эта, например (первая из них) — перемещение паттерна в виде «песочных часов» по «игровому полю», представленному матрицей, с целью найти такой паттерн, сумма цифр в котором будет максимальной.
Здесь у меня получилось два решения — частное (на Java) и общее (на Perl).