Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
В Guava на каждом методе c transform в JavaDoc написано, что transform создает View, а не новую коллекцию. В документации и примеры на это, и пояснения для чего так, и что делать если там нужна именно копия.
Не читаем, осуждаем. ССЗБ? Да.
Второй пример — вообще смешно. Вы выделили жирным «then»часть предложения, но почему-то не «if» :)
Ваш случай подпадал под один вариант, а вы выбрали другой. И пишете, что документация плохая :)
PS; Вместо того, чтобы использовать коннекшн пул нулевого размера — может лучше его всё же полностью убрать? :)
PS2: Статью следовало бы назвать «Даже усли использовать хорошие библиотеки, вы всё равно можете выстрелить себе в ногу» :)
Да, написано, но абсолютно неочевидно из сигнатуры метода
Не могли бы Вы объяснить, что Вы имеете ввиду? Пулл нулевого размера — это и есть дефакто отсутствие пулинга. (если просто убрать настройку пулинга, то будет использоваться default value 1 и это как раз то, что делать совсем не стоит).Я подразумевал, что отключенный пуллинг и пул нулевого размера — не одно и тоже. Во втором случае остается оверхэд на оборачивание всех вспомогательных JDBC объектов в прокси пула.
@Override
public ImmutableList<Entity> getCheckedEntityByIds(List<Integer> ids) {
logger.info("Received " + ids.size() + " ids.");
Collection<Entity> filteredEntities = ids.stream()
.map(id -> storageService.lookupEntity(id))
.filter(Entity::performCheck)
.collect(Collectors.toCollection());
notificationService.sendUpdate(filteredEntities.stream()
.map(Entity::getId)
.collect(Collectors.toCollection()));
logger.info("Got " + filteredEntities.size() + " entities.");
return ImmutableList.copyOf(filteredEntities);
}
Collectors.toCollection()
без аргумента не бывает. Тогда уж Collectors.toList()
. Но вообще стрим действительно продуманнее. Тут есть явная разница между коллекцией и потоком данных, одно с другим не спутаешь.
Как написать красивый код и завалить проект