0

我正在寻找一种方法来确定集合(甚至可能是任何 Iterable)是否保证由其类合同订购。

我已经知道 Guava 方法:Ordering.natural().isOrdered(myCollection) 但是这个方法与我的需要无关,因为它检查集合中的值是否是有序的。这不是我需要确定的,我想要的是一种isSorted行为如下的方法:

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

ETC...

我正在查看的内容通常是通过检查集合的类来实现的,并将其与集合的某种参考表进行比较,这些参考表约定它们是有序的,并且只对这些集合返回 true。

你知道这样的东西是否已经存在于某个图书馆吗?

4

3 回答 3

0

您可以执行以下操作来确定是否将集合定义为排序。

collection instanceof SortedSet
于 2012-03-09T14:07:38.457 回答
0

不,这在任何图书馆中都不存在,而且有充分的理由。

该库必须知道所有飞来飞去的集合类型。如果您使用的是 Apache Commons Collections,它必须了解所有这些。如果你使用 Guava,它必须知道所有这些。如果有人出现并介绍了一种新的集合类型,您现在将拒绝该类型,即使它已订购。

在一个不知道您可能拥有哪些其他库以及可能存在的任何其他集合类型的库中提供该方法是没有意义的。

在最终应用程序中,使用您已经描述的启发式技术来实现它可能是有意义的。

如果我们知道您实际尝试使用此方法做什么,这可能会有所帮助。

于 2012-03-09T17:54:13.890 回答
0

有序集合共有三个接口:List、SortedSet和SortedMap。您可以检查您的班级是否正在实施其中之一。

于 2012-03-09T14:25:16.987 回答