Где найти базовые предикаты, такие как 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