在 Java 中对我自己类型的数组列表进行排序

发布于 2024-12-05 19:36:30 字数 554 浏览 0 评论 0原文

我在 Java 中有一个名为 Item 的类型,其定义如下:

private Integer itemNo;
private String itemName;
private String itemDescription;
...

我希望能够根据 itemName 对这种类型的数组列表进行降序排序。

根据我的阅读,这可以通过以下方式完成:

Collections.sort(items, Collections.reverseOrder());

Where items is:

ArrayList<Item> items = new ArrayList<Item>();

但我发现对 Collections.sort 的调用给了我一个:

Item cannot be cast to java.lang.Comparable

运行时异常。

谁能建议我需要做什么?

I have a type in Java called Item which is defined as follows:

private Integer itemNo;
private String itemName;
private String itemDescription;
...

And I would like to be able to sort an arraylist of this type in descending order according to itemName.

From what I read, this can be done via:

Collections.sort(items, Collections.reverseOrder());

Where items is:

ArrayList<Item> items = new ArrayList<Item>();

But I find that the call to Collections.sort gives me a:

Item cannot be cast to java.lang.Comparable

Run time exception.

Can anyone advise on what I need to do?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

时光磨忆 2024-12-12 19:36:30

将 Item 声明为 Comparable,并实现comapreTo 方法比较itemName相反顺序(即将“thatthis”进行比较,而不是正常的“this” 那个”)。

像这样:

public class Item implements Comparable<Item> {
    private Integer itemNo;
    private String itemName;
    private String itemDescription;

    public int compareTo(Item o) {
        return o.itemName.compareTo(itemName); // Note reverse of normal order
    }

    // rest of class
}

Declare Item to be Comparable, and implement the comapreTo method to compare itemName in reverse order (ie compare "that to this", rather than the normal "this to that").

Like this:

public class Item implements Comparable<Item> {
    private Integer itemNo;
    private String itemName;
    private String itemDescription;

    public int compareTo(Item o) {
        return o.itemName.compareTo(itemName); // Note reverse of normal order
    }

    // rest of class
}
高速公鹿 2024-12-12 19:36:30

您需要自定义 Item 来实现 Comparable ,否则您可以使用比较器

You need your custom Item to implement Comparable , or otherwise you can do it using Comparator

随风而去 2024-12-12 19:36:30

您可能应该使 Item 实现 Comparable创建一个比较器您的项目,并使用 Collections.sort(List,Comparator)

代码快照:

Comparator:

public static class MyComparator implements Comparator<Item> {
    @Override
    public int compare(Item o1, Item o2) {
        //reverse order: o2 is compared to o1, instead of o1 to o2.
        return o2.getItemName().compareTo(o1.getItemName()); 
    }
}

用法:

    Collections.sort(list,new MyComparator());

(*)注意 MyComparator 声明中的 static 关键字是因为我将其实现为内部类,如果您将此类实现为外部类,你应该删除这个关键字

You should probably make Item implement Comparable, or create a Comparator to your Item, and use Collections.sort(List,Comparator)

code snap:

Comparator:

public static class MyComparator implements Comparator<Item> {
    @Override
    public int compare(Item o1, Item o2) {
        //reverse order: o2 is compared to o1, instead of o1 to o2.
        return o2.getItemName().compareTo(o1.getItemName()); 
    }
}

usage:

    Collections.sort(list,new MyComparator());

(*)note that the static keyword in MyComparator's declaration is because I implemented it as an inner class, if you implement this class as an outer class, you should remove this keyword

空气里的味道 2024-12-12 19:36:30

您需要实现 Comparable 接口并定义 compareTo(T o) 方法。

另请参阅:

You need to implement the Comparable interface and define the compareTo(T o) method.

See also:

月下凄凉 2024-12-12 19:36:30

您需要使您的 Item 类实现 java.lang.Comparable 接口。

public class Item implements Comparable<Item> {

   // your code here, including an implementation of the compare method
}

You need to make your Item class implement the java.lang.Comparable interface.

public class Item implements Comparable<Item> {

   // your code here, including an implementation of the compare method
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文