Сортировка arraylist моего собственного типа в Java - PullRequest
2 голосов
/ 22 сентября 2011

У меня есть тип в Java с именем Item, который определяется следующим образом:

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

И я хотел бы иметь возможность сортировать массив этого типа в порядке убывания в соответствии с itemName.

Из того, что я прочитал, это можно сделать следующим образом:

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

Где элементы:

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

Но я обнаружил, что вызов Collections.sort дает мне:

Item cannot be cast to java.lang.Comparable

Исключение во время выполнения.

Может кто-нибудь посоветовать, что мне нужно сделать?

Ответы [ 5 ]

6 голосов
/ 22 сентября 2011

Объявите Item равным Comparable и внедрите метод comapreTo для сравнения itemName в в обратном порядке (т.е. сравните " с * 1009)* до это", а не обычное" это до , что").

Как это:

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
}
2 голосов
/ 22 сентября 2011

Вы, вероятно, должны сделать Item реализующим Comparable , или , создать Comparator для вашего Item и использовать Collections.sort (List, 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());

(*) обратите внимание, что static ключевое слово в объявлении MyComparator потому, что я реализовал его как внутренний класс, если вы реализуете этот класс как внешний класс, вы должны удалить это ключевое слово

2 голосов
/ 22 сентября 2011

Вам нужен ваш пользовательский Item для реализации Comparable, иначе вы можете сделать это с помощью Comparator

0 голосов
/ 22 сентября 2011

Вам нужно, чтобы ваш класс Item реализовал интерфейс java.lang.Comparable.

0 голосов
/ 22 сентября 2011

Вам необходимо реализовать интерфейс Comparable и определить метод compareTo(T o).

См. Также:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...