Java 为类创建比较器有什么诀窍吗?

Java 为类创建比较器有什么诀窍吗?,java,comparator,Java,Comparator,我正在测试比较器。这里有我的类项目,它有两个字段int price和int comments 我只需将价格按升序排序,然后按注释即可覆盖比较功能 然后我通过重写compare(Object o1,Object o2)函数来创建自己的比较器。它只需从Item类返回compareTo函数 但结果是,当我将比较器与array.sort(array,new MyComparator())一起使用时,它就不起作用了。我哪里出错了 class Item implements Comparable{

我正在测试比较器。这里有我的类项目,它有两个字段
int price
int comments

我只需将价格按升序排序,然后按注释即可覆盖比较功能

然后我通过重写compare(Object o1,Object o2)函数来创建自己的比较器。它只需从Item类返回compareTo函数

但结果是,当我将比较器与
array.sort(array,new MyComparator())
一起使用时,它就不起作用了。我哪里出错了

    class Item implements Comparable{
    private double price;
    private double comments;
    public Item(double price, double comments){
        this.comments = comments;
        this.price = price;
    }

    @Override
    public int compareTo(Object o) {
        if (o instanceof Item){
            Item item2  = (Item) o;  
            int priceCompare =  Double.compare(this.price, item2.price); 
            if(priceCompare != 0) {
                return priceCompare;
            }
            return Double.compare(this.comments, item2.comments);  
        }else{
                throw new RuntimeException("Wrong compare Class");
        }
    }

    @Override
    public String toString() {
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("Items:{").append(" price: ").
                append(price).append(" comments: ").append(comments).append(" }");
        return stringBuilder.toString();
    }
}
这里有问题

if(项目的o1实例和项目的o2实例){
项目1=(项目)o1;
item2=(Item)o1;//此处
返回项目1.比较(项目2);
}否则{
抛出新的RuntimeException(“错误的输入类型”);
}
你应该修这条线

项目2=(项目)o1

由此

项目2=(项目)o2

此外,使用通用版本的接口避免将所有这些冗长的代码
转换为Item、instanceOf..


所以
Comparable
和这
Comparator

这一行:
Item item2=(Item)o1包含输入错误:应该是
o2
。旁注:。
    class MyComparator implements Comparator {

    @Override
    public int compare(Object o1, Object o2) {
        System.out.println("asdasd");
        if (o1 instanceof Item && o2 instanceof Item) {
            Item item1 = (Item) o1;
            Item item2 = (Item) o1;
            return item1.compareTo(item2);
        } else {
            throw new RuntimeException("Wrong input type");
        }
    }

}
    @Test
    public void test3Comparator() {
        Item[] items = new Item[]{new Item(65, 70),
                new Item(45, 7),new Item(98, 89),
                new Item(23, 56),new Item(78, 90)};
        System.out.println(Arrays.toString(items));
        Arrays.sort(items, new MyComparator());  
        System.out.println(Arrays.toString(items));   // Still shows the original order

    }