Определение, является ли Java Iterable упорядоченным по контракту - PullRequest
0 голосов
/ 09 марта 2012

Я ищу способ определить, гарантированно ли Collection (или, может быть, даже любой Iterable) упорядочен в соответствии с классовым контрактом.

Я уже знаю метод гуавы: Ordering.natural().isOrdered(myCollection) Но этот метод не соответствует моим потребностям, потому что он проверяет, упорядочены ли значения внутри коллекции. Это не то, что мне нужно, чтобы определить, что я хочу иметь, это метод isSorted, который будет вести себя так:

isSorted(new HashSet()) -> false
isSorted(new ArrayList()) -> true

и т.д ...

То, на что я смотрю, обычно реализуется путем проверки класса коллекции и сравнения его с некоторой справочной таблицей коллекций, в контракте которых указано, что они упорядочены, и возвращают только true для этих. *

Знаете ли вы, существует ли что-то подобное в какой-то библиотеке?

Ответы [ 3 ]

0 голосов
/ 09 марта 2012

Существует три интерфейса для упорядоченных коллекций: List, SortedSet и SortedMap.Вы можете проверить, реализует ли ваш класс одну из них.

0 голосов
/ 09 марта 2012

Нет, его нет ни в одной библиотеке, и на то есть веские причины.

Эта библиотека должна знать все типы коллекций, которые летают вокруг. Если вы используете Apache Commons Collections, он должен знать обо всех них. Если вы используете гуаву, она должна знать обо всех этих. Если кто-то придет и представит новый тип коллекции, вы теперь отклоните этот тип, даже если он упорядочен.

Нет смысла предоставлять этот метод в библиотеке, которая не может знать, какие другие библиотеки вы можете иметь с какими-либо другими типами коллекций.

В конечном приложении может иметь смысл реализовать его с помощью эвристических методов, которые вы уже описывали.

Это может помочь, если бы мы знали, что вы на самом деле пытаетесь сделать с помощью этого метода.

0 голосов
/ 09 марта 2012

Вы можете сделать следующее, чтобы определить, определена ли коллекция для сортировки.

collection instanceof SortedSet
...