Это хороший дизайн, чтобы использовать предикаты Google Guavas для отделения методов фильтрации от классов

Сегодня я написал в своем блоге следующую статью о том, как предикаты Google Guavas можно использовать для повышения расширяемости вашего дизайна. Это заставило меня задать себе следующий вопрос: "Необходимость в этом решении вызвана более глубоким недостатком дизайна?". Есть ли другой "более чистый" способ достижения такого типа расширяемости? Я просто слишком об этом думаю?

1 ответ

Решение

Google Guava добавляет в Java несколько вещей, которые должны были быть, но не были (многие из которых включены в v7).

ИМО Гуава имеет тенденцию быть очень чистым и быстрым. Сравнить гуавы ComparisonChain с (например) Apache Commons CompareToBuilder классы. Оба делают одно и то же. В то время как Apache очень прост и достаточно легок для понимания новичками, Guava - более быстрый / чище / менее ресурсоемкий (лучше?) Подход.

Так далеко как Predicate Так, они выполняют функцию и делают это хорошо, особенно когда вы комбинируете ее со всеми другими вещами гуавы, такими как Iterators.filter,

Инструменты Guava должны быть поняты, прежде чем они будут использованы. Например, если вы собираетесь просмотреть фильтрованный список несколько раз, и ваш Predicate имеет немаловажную стоимость (процессор / память / время), тогда вам может быть лучше перебрать его один раз и сохранить значения в Collection во-первых, так как некоторые из этих методов просто обернуть Iterable в класс которого next() функция просто вызывает next() на нефильтрованной Iterable пока он не найдет запись, которая проходит фильтр и возвращает его.

Так что да, гуава очень полезна. В том числе Predicate с и Iterables а также Collections2 фильтрация и т. д. Однако, это всегда помогает узнать, что происходит под капотом, и какие проблемы или последствия для производительности вам могут понадобиться, если вы обнаружите, что ваш код нуждается в оптимизации.

Другие вопросы по тегам