通用比较器

时间:2011-10-11 04:10:54

标签: java comparator

这是一个学校项目。我有一个Query<E>类,它包含一个属于Query条件的元素。因此,如果它是GreaterQuery并且元素是10,则所有大于10的值都会通过该条件。

Query对象的构造函数接受元素,并使用Comparator对象来测试条件。如果传入null,我需要创建一个Comparator来用于比较。

我有一个match(E element)方法来测试条件。这是它的骨架版本:

public boolean matches(E element)
{
    if (comparator == null)
    {

    }
}

我认为我能做的是在Comparator语句中写一个匿名的if类,虽然我不确定这是否可行。我遇到的另一个问题是如何在不了解它们的情况下与E对象进行比较。此外,我不确定这一点,但可能存在E extends Comparable的前提条件。现在已经很晚了,如果这没有道理,我会道歉。但任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:4)

如果E保证实施Comparable<E>,您可以执行此操作:

if (comparator == null) {
    comparator = new Comparator<E>() {
        @Override
        public int compare(E lhs, E rhs) {
            return lhs.compareTo(rhs);
        }
    };
}

答案 1 :(得分:1)

从Java 8开始,有一个method in the standard library可以完成克里斯回答中显示的内容:

if (comparator == null) {
    comparator = Comparator.naturalOrder();
}