Где найти базовые предикаты, такие как moreThan для гуавы?

Я использую библиотеку гуавы и заметил, что очень полезный предикат не определен - "больше чем". Есть ли другое место, где я должен искать базовые предикаты, подобные этому, или я обречен на создание своего собственного фляги функциональной поддержки, которая включает в себя подобные вещи, и импорта его во все мои проекты? Есть ли причина, по которой они не включили бы это, но нашли бы время, чтобы сделать кучу других предикатов (в классе Predicates)?

4 ответа

Решение

С Predicate Интерфейс и различные служебные методы для фильтрации коллекций с помощью Предиката, Guava предоставляет ядро, на котором вы можете строить.

Predicates Класс позволяет создавать некоторые часто используемые предикаты. Я полагаю, что вы могли бы сделать запрос на улучшение в трекере проблем, как предложил Майк, но я не уверен, что они добавят его, поскольку Гуава стремится к высокому соотношению мощности к весу.

Если бы они добавили предикат "greatThan", им также нужно было бы добавить "greatOrEqualThan", "lesserThan", "lesserOrEqualThan"... Это было бы полезно, но это много "API-раздувания" для предиката, который занимает только одну строку для реализации. Хотя стоит попробовать.

Лучшим решением может быть проект с открытым исходным кодом, который расширяет Guava всеми функциональными возможностями, которые недоступны в самой Guava. Мы могли бы назвать это "остатками гуавы" или что-то в этом роде;) Или, может быть, попросить проект Biscotti добавить такие служебные методы (у них уже есть некоторая функциональность "приятно иметь", которой нет в Guava).

Range and Ranges (обновление: статические методы на Ranges были сложены в Range по состоянию на Гуава 14.0) теперь были добавлены для r10. Вы сможете просто сделать:

Iterable<Integer> positive = Iterables.filter(numbers, Range.greaterThan(0));

Rangeу них есть много других мощных функций, в том числе возможность просмотра Range как смежный ImmutableSortedSet по дискретной области:

ContiguousSet<Integer> oneToOneHundred = ContiguousSet.create(
    Range.closed(1, 100), DiscreteDomains.integers());

Я только что показал Integerздесь, но Range материал работает для любого Comparable, ContiguousSet требует DiscreteDomain для типа... Guava предоставляет DiscreteDomain.integers(), .longs() а также .bigIntegers() в данный момент.

Ранее я запрашивал эту функцию и был упомянут к этой проблеме. По-видимому, эта функциональность будет реализована через диапазоны, которые будут реализовывать Predicate,

Predicates собирает некоторые общие предикаты, но не больше единицы. Я не думаю, что гуава дает такую ​​вещь. Вы можете попробовать отправить запрос об ошибке / функции на сайте проекта guava: http://code.google.com/p/guava-libraries/issues/list

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